我刚刚开始搞乱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"));
}
第二部分工作正常 - 它从out.txt文件中读取并将其加载到文本浏览器中。但是,我的进程似乎没有运行,exitCode()总是返回零(我在“prog”中将它更改为100)。
根据我的理解,QProcess的工作目录(除非另有说明)设置为其构建文件夹,因此调用process->start("./prog");
应该有效,但事实并非如此。我也尝试通过引用QResource
并提供完整路径来调用它,但无济于事。
任何帮助将不胜感激,谢谢!
我正在使用Qt Creator 2.81基于在x64 Ubuntu 12.04上运行的Qt 5.1.1。
编辑:我忘了提到可执行文件“prog”只解析几行文本并将它们输出到一个文件,然后将其读取并输出到文本框。外部程序“prog”实际上似乎没有运行,我已经尝试使用process->waitForFinished()
。
答案 0 :(得分:0)
在检查退出代码之前,您必须等到该过程完成。您可以使用finised()信号或waitForFinished()等待。在waitForFinished成功或发出完成的信号后,检查退出代码是安全的。我几乎总是会使用finshed信号。但是,您还应该确保该过程首先开始。使用error()信号是我检测启动过程是否有问题的方法。 QProcess将使用描述错误的代码发出此信息。 QProcess :: FailedToStart会告诉您应用程序首先没有启动。
答案 1 :(得分:0)
你有两个问题: