0

最终编辑:我在下面编写的代码有效,因此请忽略我编写的所有内容。似乎当我将输入文本文件复制到构建目录时,该文件在进程中以某种方式损坏,这导致我的外部可执行文件“prog”中断。很抱歉浪费您的时间,并感谢所有试图提供帮助的人!

我刚刚开始使用 Qt 并且有一个名为 test_tiny 的项目。在我的项目的 build 文件夹(可执行 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"));
}

第二部分工作得很好——它从 out.txt 文件中读取并将其加载到文本浏览器中。但是,我的进程似乎没有运行,并且 exitCode() 总是返回零(我在“prog”中将其更改为 100)。

据我了解,QProcess 的工作目录(除非另有说明)设置为其构建文件夹,因此调用process->start("./prog");应该可以工作,但它没有。我也尝试通过引用 aQResource以及给出完整路径来调用它,但无济于事。

任何帮助将不胜感激,谢谢!

我正在使用基于在 x64 Ubuntu 12.04 上运行的 Qt 5.1.1 的 Qt Creator 2.81。

编辑:我忘了提到可执行文件“prog”只解析几行文本并将它们输出到一个文件,然后读取并输出到一个文本框。外部程序“prog”实际上似乎没有运行,我已经尝试过使用process->waitForFinished().

4

2 回答 2

0

在检查退出代码之前,您必须等到该过程完成。您可以使用finised() 信号或waitForFinished() 等待。在 waitForFinished 成功或发出 finished 信号后,检查退出代码是安全的。我几乎总是会使用 finshed 信号。但是,您还应该确保该过程首先开始。使用 error() 信号是我检测启动进程是否有问题的方法。QProcess 将使用描述错误的代码发出它。QProcess::FailedToStart 会告诉你你的应用程序一开始没有启动。

于 2013-09-22T23:23:05.773 回答
0

你有两个问题:

  1. 你在正确的道路上吗?在使用完整路径进行调试时,它使生活更轻松。
  2. 您需要调用 QProcess::waitForFinished(LARGE_TIME) 或连接到 finished() 信号才能检查错误(应用程序异步启动)。
于 2013-09-23T08:30:52.270 回答