我有一个文件夹的路径和从那个文件夹执行的命令。这是一个任意复杂的命令。前任:qmake -v > 1.txt.
我想我需要运行一个shell (cmd.exe,因为我在Windows上),并在那里执行命令:
QProcess::startDetached("cmd.exe", QString("qmake -v > 1.txt").split(' ', ( QString::SkipEmptyParts),“C:/文件夹/”);
但不起作用。它确实在指定的路径上启动控制台窗口(cmd.exe),但不执行命令。然后我试过:
QProcess::startDetached("cmd.exe", QStringList() << "start" << QString("qmake -v > 1.txt").split(' ', QString::SkipEmptyParts), "C:/folder/");也没有运气。最后,我只想测试一下我是否会带着这个去任何地方:
QProcess::startDetached("qmake.exe", QString("-r -tp vc").split(' ', QString::SkipEmptyParts), "C:/folder_containing_qt_project/");控制台窗口会出现很短的时间,但不会生成项目。
我做错了什么,我如何才能用QProcess实现我想要的(如果没有其他方法,我不介意使用WinAPI,但是非常喜欢在Linux / Mac /Windows上使用相同的代码)。
值得注意的是,在同一应用程序的另一种方法中,我对使用notepad.exe <path to a text file>执行startDetached没有问题。
发布于 2014-05-02 20:36:50
我想你是在寻找这样的方法:
void::setStandardOutputFile(const QString & fileName,OpenMode模式=截断)
你会像这样使用它:
QProcess myProcess;
myProcess.setStandardOutputFile("1.txt");
myProcess.start("qmake -v");
myProcess.waitForFinished();您还可以将输出读入应用程序,并使用QFile将其写出来。这可能会让你走向那个方向:
QByteArray QProcess::readAllStandardOutput() 不管当前读取通道如何,该函数都以QByteArray的形式返回来自进程标准输出的所有可用数据。
因此,您可以编写类似这样的东西,但是它更复杂一些,而且可能需要内存,因此它只是为了演示目的而不需要块读写。
QProcess myProcess;
myProcess.start("qmake -v");
myProcess.waitForFinished();
QFile file("1.txt");
file.open(QIODevice::WriteOnly);
file.write(myProcess.readAllStandardOutput());
file.close();免责声明:我故意不写错误检查来保持简单。
https://stackoverflow.com/questions/23436138
复制相似问题