我寫了一個最小的示例應用程序,它展示瞭如何使用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