0

Ubuntu と Qt Creator 4 を使用しています

abc.outボタンを押したときに実行したい実行形式 (たとえば ) の .cpp プログラムがあります。これにはいくつかの cin と cout が含まれているため、値を入出力できるように「端末」(Ubuntu) で実行する必要があります。どうやってやるの?

system() と QProcess p1; を試しました。p1.start(./abc.out);

QProcess を使用すると、実行可能ファイルは実行されますが、最初のカウントで停止します。ターミナルではなく、Qt Creator のアプリケーション出力画面で実行されます。

例: アプリケーションの出力に次のように表示されます。

名前を入力:

ここで値を入力して Enter キーを押すと、値が受け入れられず、次の行に移動してさらに入力できるようになります。abc.outこのファイルを端末で実行したい。どんなアイデアでも本当に役に立ちます。

4

3 に答える 3

1

Qt Creator 2.4のことですか?いずれの場合も、[プロジェクト]タブに[実行設定]セクションがあり、そこから[ターミナルで実行]チェックボックスがあります。Custom Executableオプションを使用して、そこに入力することもgnome-terminal --command ./abc.outできます。QtCreator 2.5を使用しているため、正確な詳細は少し異なる場合があります。

これはQtCreatorから起動するときに機能するはずですが、IDEの外部でアプリを使用する場合は、実行可能ファイルをダブルクリックするのではなく、ターミナルから起動する必要があります。これを修正するには、2つの方法が考えられます。

  1. QtGui(のようなものQProcess::execute("gnome-terminal --command ./abc.out");)からターミナルウィンドウを起動しますが、問題はシステムによってターミナル名が異なることです。
  2. GUIの一部としてQt入力/テキストボックスを自分で提供し、ユーザー入力を実行可能ファイル(のようなものmyqprocess.write(input_asked_from_user_by_QtGui);)に転送します。ここでは、ユーザーに事前に尋ねる情報を知っておく必要があります。開始されたプロセスのcout出力を表示する場合readは、QProcessのメソッドとフレンドを使用できます。
于 2012-06-27T09:03:04.653 に答える
0

あなたの質問から、QProcessを使用して他のアプリケーションを起動するアプリケーションを作成していると思います。それは問題ありませんが、サブプロセスが標準入力からのデータを待機している場合、データを提供しなかったため、サブプロセスは永久に待機します。親アプリケーションのstdinをサブプロセスに自動的に誘導することはできません。メインアプリから2つのプロセスを開始していると想像してください。入力はどの子プロセスに進む必要がありますか?

子プロセスと通信する場合は、QProcessのQIODeviceメソッドを使用して、そのアプリケーションとの間でデータを送受信する必要があります。

于 2012-06-27T09:26:15.233 に答える
0

唯一の賢明な解決策は、ターミナルでターゲットアプリケーションを起動することです。独自のコードがターミナルウィンドウを提供するか、既存のターミナルアプリケーションを再利用するかはあなた次第です。

于 2012-06-27T17:42:20.170 に答える