0

最終編集: 以下に書いたコードは機能するので、私が書いたものはすべて無視してください。入力テキスト ファイルをビルド ディレクトリにコピーしたときに、そのファイルが処理中に破損したため、外部の実行可能ファイル「prog」が破損したようです。時間を無駄にして申し訳ありません。助けようとした皆さんに感謝します。

Qt をいじり始めたばかりで、test_tiny というプロジェクトがあります。プロジェクトのビルド フォルダー (実行可能ファイル test_tiny がある場所) に、ファイルから読み取り、その処理を実行し、別のファイルに出力する "prog" という別の小さな C++ 実行可能ファイルを移動しました。入力ファイルもビルド ディレクトリにあります。

いくつかのテキスト ボックスといくつかのボタンを含むウィンドウもあります。これらのボタンのいずれかを押して、外部プログラム「prog」を実行したいと思います。これは私がこれまでに得たものです:

void MainWindow::load2() {
    QProcess *process = new QProcess(this);
    process->start("./prog");
    qDebug() << process->exitCode();
    ui->textBrowser_2->clear();
    ui->textBrowser_2->insertPlainText(read(":/File/out.txt"));
}

2 番目の部分は問題なく動作します。out.txt ファイルから読み取り、テキスト ブラウザにロードします。しかし、私のプロセスは実行されていないようで、exitCode() は常にゼロを返します (「prog」で 100 に変更しました)。

私が理解していることから、QProcess の作業ディレクトリ (特に指定がない限り) はビルド フォルダーに設定されているため、呼び出しprocess->start("./prog");は機能するはずですが、機能しません。QResourceまた、 aを参照してフルパスを指定して呼び出してみましたが、役に立ちませんでした。

どんな助けでも大歓迎です、ありがとう!

x64 Ubuntu 12.04で実行されているQt 5.1.1に基づくQt Creator 2.81を使用しています。

EDIT:実行可能な「prog」は数行のテキストのみを解析してファイルに出力し、それを読み取ってテキストボックスに出力することを忘れていました。外部プログラム「prog」は実際には動いていないようで、すでに使ってみましたprocess->waitForFinished()

4

2 に答える 2

0

2 つの問題があります。

  1. あなたは正しい道を進んでいますか?フルパスを使用してデバッグしている間は、作業が楽になります。
  2. エラーを確認する前に、QProcess::waitForFinished(LARGE_TIME) を呼び出すか、finished() シグナルに接続する必要があります (アプリは非同期で開始されます)。
于 2013-09-23T08:30:52.270 に答える