質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

867閲覧

画像処理 ツール開発

safijeifh

総合スコア11

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2019/05/28 08:31

前提・実現したいこと

GUIでの画像処理ツールの開発

発生している問題・エラーメッセージ

今現在は、CUI(C++)上で画像処理プログラムを作成いたしました。
内容はimage.cppを動かすと監視対象のフォルダに画像が入ってきた瞬間に
処理を行い、入力画像windowと処理結果windowが並んで表示されます。
それを、Qtを用いてボタンを押すことで処理が行われ(プログラムが起動)、処理結果がQtのGraphics Viewなどに表示したいと考えています。

困っていることは外部のプログラム(image.cpp)をQProcessを使うことで可能ということは調べたのですが、うまく行きません。
ここを勉強すると良いなどのQtを使ったことがある人のアドバイスがほしいです。
このような処理はQtで書きなおしたほうが良いのでしょうか?
できれば作成したCUIを利用したいと考えています。

###ここに言語名を入力

C++

補足情報(FW/ツールのバージョンなど)

ubuntu 16.04LTS
Qt 5.11

LenItsuki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/05/28 08:40

その CUI アプリケーションの入力と出力のインタフェースはどのようになっていますか?
PineMatsu

2019/05/28 08:52

C++の画像処理部分をDLL化して呼び出すかですね。
safijeifh

2019/05/28 09:06

申し訳ありません。まだプログラミング初心者なのでインターフェースがよくわかりません。入力はたぶんシリアルインタフェースだと思います。
safijeifh

2019/05/28 09:10

qtでは開発しにくいのでしょうか?
tiitoi

2019/05/28 09:10

インタフェースはアプリケーションの入出力を指して言いました。 画像処理のアプリケーションとなると、なんらかの形で画像を渡して、処理した結果 (画像?) を受け取ることになると思うのですが、それがどのような形式で行われるのでしょうか。(例: ファイルでやり取りするなど)
tiitoi

2019/05/28 09:13

画像処理のプログラムもご自身で作られたものであるならば、最初から GUI の部分を含めて1つのプログラムとして作るのでは駄目なのでしょうか?
safijeifh

2019/05/28 09:21

CUIで画像処理ができるように作成したのですが、見た目が悪いということでGUIにして一般の方にもわかりやすくしたいと考えているのですが、GUIはまったく触れたことがなく調べた結果Qtがおすすめと聞いてやってみようと思った感じです。他のGUI作成方法も検討してみます。
tiitoi

2019/05/28 09:26 編集

Qt でいいと思いますよ。 結果を表示したりする GUI は部分は Qt、画像処理は作成済みの画像処理のコードを流用して1つのプログラムを作成すればいいです。 あくまで Qt は GUI を作成するライブラリにすぎないので、他のC++ のコードと混ぜこぜにして使えます。
safijeifh

2019/05/28 09:29

ご指導ありがとうございます。 CUIの画像処理を残し、QtのGUIで表示させるように考えています。 ただ、pushbottonからCUI(image.cpp)を起動させることができていないのでそこをがんばります。
tiitoi

2019/05/28 09:47

QProcess の使い方について回答しました。 質問に書いてある「うまくいかなかった」とはどううまくいかなかったのでしょうか?(例: エラーがでた、指定したアプリケーション (.exe) が起動しなかったなど)
safijeifh

2019/05/28 09:56

うまく行かなかったという漠然なもので申し訳ありません。 できなかったことは指定したアプリケーション (.exe) が起動しなかったです。 というより、Qprocessの使い方がわからないというのが大きな問題になっています。そのため、なにかサンプルでもいいのでボタンを押すことで外部のプログラムを動かしたことある人や参考ページ等を教えていただきたく投稿しました。
tiitoi

2019/05/28 10:00

回答に書いたように QProcess::execute(exe のパス) の1行で起動するはずです。 起動しない場合はパスが間違っている可能性があります。 相対パスの場合は Qt で作った実行ファイルがあるパスが基点になります。 とりあえず絶対パスで指定してうまくいくかどうかを試してみてはどうでしょうか。 ちなみに \ マークは C++ ではエスケープが必要な文字なので、回答のように raw 文字列を使うか \\ でエスケープしてください
tiitoi

2019/05/28 10:03

ちなみに > If the process cannot be started, -2 is returned. If the process crashes とあるように QProcess::execute(exe のパス) を呼び出して、パスが間違っている等で起動できなかった場合は -2、クラッシュした場合は -1 を返すので、返り値をチェックして起動しなかった原因をチェックできます。 https://doc.qt.io/qt-5/qprocess.html#execute
guest

回答1

0

ベストアンサー

困っていることは外部のプログラム(image.cpp)をQProcessを使うことで可能ということは調べたのですが、うまく行きません。

QProcess の使い方に関して回答します。
以下のように、execute() 関数の引数に実行ファイルのパス (絶対パスまたは相対パス) を渡して実行することで、指定したアプリケーションが起動します。
execute() は呼び出したアプリケーションが終了するまで待機し、終了したら、アプリケーションの exit コードを返します。

python

1// ペイントを開く例 2int ret = QProcess::execute(R"(C:\WINDOWS\system32\mspaint.exe)"); 3qDebug() << "return code" << ret;

詳しくは公式ドキュメント QProcess Class | Qt Core 5.12.3 を参照ください。

投稿2019/05/28 09:46

編集2019/05/28 09:46
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

safijeifh

2019/05/28 10:09

‘QProcess’ has not been declared' invalid use of incomplete type ‘class QDebug’ このエラーに悩まされている感じです。 ^
tiitoi

2019/05/28 10:11

Qt であるクラスを使う場合、ヘッダーの include は必要です。 以下をコードの先頭に追加してみてください。 #include <QDebug> #include <QProcess>
safijeifh

2019/05/28 10:17

ありがとうございます。がんばります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問