我正在尝试学习QProcess的工作原理并拥有这种代码:
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <QtCore/QCoreApplication>
#include <QStringList>
#include <QString>
#include <QProcess>
#include <QIODevice>
#define LINE cout << "\n=====================================\n" << endl;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
LINE;
cout << "\nstarting process ..." << endl;
QObject *parent;
QString program = "make";
QStringList arguments;
arguments << "all";
QProcess *process = new QProcess();
QString outputFile = "H:\\processOutput.txt";
process->setStandardOutputFile( outputFile, QIODevice::Append);
process->setWorkingDirectory( "H:\\sample");
process->start(program, arguments );
cout << "\ndone..." << endl;
LINE;
return a.exec();
} // end main
进程“程序”应该在文件夹“H:\ sample”上运行,该文件夹有两个文件,main.cpp和Makefile。
我的期望是“make”将使用“all”参数调用。检查进程的输出(在文件“H:\ processOutput.txt”中)我只看到文本“main”,并且没有任何编译输出。
在cmd上运行“make all”工作并产生通常的结果,main.exe。整个代码似乎运行到底,因为我可以看到“完成......”这一行。 我错过了什么?
答案 0 :(得分:2)
QProcess,如名称所示,启动一个单独的进程,但是该进程不像命令提示符那样绑定到环境映射。
由于make
中没有可执行文件H:\sample
,该进程会立即退出。相反,请将您的调用包围在cmd中,如下所示:
...
QString program = "%cmdspec%";
QStringList arguments;
arguments << "\\C" << "\"make all\"";
QProcess *process = new QProcess();
...
%cmdspec%是一个全局环境变量,指示命令提示符可执行文件的默认系统路径。