QProcess 执行一个 c++ 文件
Posted
技术标签:
【中文标题】QProcess 执行一个 c++ 文件【英文标题】:QProcess executing a c++ file 【发布时间】:2014-08-31 20:57:23 【问题描述】:在某些地方,我无法使用 QProcess 运行预构建的 c++ 二进制文件。同时还有其他问题,人们正在使用 QProcess 执行 shell 脚本等,所以我很困惑。我可以使用 QProcess 执行预构建的 c++ 二进制文件吗?
这个二进制文件读取一个文本文件并创建两个文本文件作为回报。
我创建了一个带有 GUI 的基本 UI,并有一个按钮,单击该按钮会调用外部二进制文件。
用execute
运行它会给我一个QIODevice: read: device not open
的错误。当我使用start
时,没有报错。但是也没有创建输出文件。
在 qt 或其他方法中是否允许这样做的任何想法都需要遵循。
void MainWindow::on_startButton_clicked()
QString program = "./home/naveen/sdj";
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
myProcess->waitForFinished();
qDebug() << myProcess->exitStatus();
qDebug() << myProcess->readAllStandardError();
【问题讨论】:
【参考方案1】:首先,QProcess::execute() 是a static method——没有理由创建一个 QProcess 实例来使用它。如果使用 QProcess::start(),它将异步执行进程。您必须先收听finished 信号,然后才能检查返回码。
第二,你确定这是你想要的吗?
QString program = "./home/naveen/sdj";
在 *nix 文件系统中,./
表示从当前目录开始。所以 QProcess 不会寻找/home/naveen/sdj
,而是寻找/yourProjectBuildPath/home/naveen/sdj
。我猜这不是你想要的。
【讨论】:
确定不是执行路径,不是构建路径? @Smar 没错,我假设应用程序由 QtCreator 运行的最常见情况。 @MrEricSir,我把它改成了/home/naveen/sdj
。虽然仍然没有执行。另外,我如何等待finished
。能不能给个提示
在你的类中添加一个槽,并使用connect(myProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(onProcessFinished(int, QProcess::ExitStatus)));
该方法应该在进程的退出状态下被调用。不过,这只适用于使用 start 方法的情况。如果使用 execute 方法,则应该等待进程完成,[根据文档](qt-project.org/doc/qt-4.7/qprocess.html)。但正如@MrErirSir 所说,您应该使用QProcess::execute(program)
而不是声明一个新对象。以上是关于QProcess 执行一个 c++ 文件的主要内容,如果未能解决你的问题,请参考以下文章