2017-02-18 50 views
0

我想創建一個簡單的Qt程序,讓我推出AVRDUDE不使用命令行操作。另外,QProcess和AVRDUDE

我看到有QProcess中很容易發動任何形式的節目,我與像資源管理器中的Word和其他簡單的程序成功地嘗試了。

的問題是,當我嘗試打開cmd.exe的什麼也沒有發生,即使我嘗試通過包含所有信息的批處理文件來啓動正確AVRDUDE。

下面的代碼

QProcess *process = new QProcess(this); 
process->startDetached("cmd.exe",QStringList()<<"C:/avrdude/avr.bat"); 
+0

請編輯您的帖子,以顯示你是怎麼批處理文件傳遞給''中QProcess' cmd.exe'。您可以使用包含'echo「Hello的批處理文件來構建可重現樣本。 – Scheff

+0

感謝您的回覆,我編輯了我的代碼,正如您所看到的,我要求打開cmd.exe,然後我想傳遞我的批處理文件的絕對路徑。在我的版本的絕對路徑是由保存從Qfiledialog – Deid

+0

獲得的路徑看起來不壞一號一目瞭然的QString給出。 'cmd.exe'是否打開和關閉,還是保持打開狀態?在前一種情況下,可以使用'/ K'作爲第一個參數。我通過在'cmd.exe'中輸入'help cmd'來發現這一點。 – Scheff

回答

1

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