我写了一个最小的示例应用程序,它展示了如何使用QProcess::startDetached()
(上按一下按钮)使用命令启动cmd
:
// standard C++ header:
#include <iostream>
// Qt header:
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QProcess>
int main(int argc, char **argv)
{
// main application
#undef qApp // undef macro qApp out of the way
QApplication qApp(argc, argv);
QMainWindow qWin;
QPushButton qBtn(QString::fromLatin1("Start cmd"));
QObject::connect(&qBtn, &QPushButton::clicked,
[](bool) {
bool ret = QProcess::startDetached(
#if 1 // let Windows search for cmd.exe in %PATH%
QString::fromLatin1("cmd.exe"),
#else // define exact path of cmd.exe
QString::fromLatin1("C:\\Windows\\system32\\cmd.exe"),
#endif // 1
QStringList()
<< QString::fromLatin1("/K")
<< QString::fromLatin1("echo Hello"));
std::cout << "QProcess::startDetached():"
<< (ret ? "OK." : "Failed!") << std::endl;
});
qWin.setCentralWidget(&qBtn);
qWin.show();
return qApp.exec();
}
Qt的项目文件离开作为练习。 (对不起,我用CMake的这一点。)
请注意#if 1
。如果将1
替换为0
,则使用具有完整路径的替代代码。 (在聊天期间,我们检查了启动cmd.exe
的特殊问题。)在我的系统上,两种替代方案都是如此。
(我的操作系统:Windows 10,VS2013,QT 5.7)
请编辑您的帖子,以显示你是怎么批处理文件传递给''中QProcess' cmd.exe'。您可以使用包含'echo“Hello的批处理文件来构建可重现样本。 – Scheff
感谢您的回复,我编辑了我的代码,正如您所看到的,我要求打开cmd.exe,然后我想传递我的批处理文件的绝对路径。在我的版本的绝对路径是由保存从Qfiledialog – Deid
获得的路径看起来不坏一号一目了然的QString给出。 'cmd.exe'是否打开和关闭,还是保持打开状态?在前一种情况下,可以使用'/ K'作为第一个参数。我通过在'cmd.exe'中输入'help cmd'来发现这一点。 – Scheff