2013-02-20 54 views
0

我想開始cmd.exeQProcess沒有startDetached,因爲我需要與運行的cmd進行交互。並且cmd必須處於forground狀態。並且我想在第一個進程完成後獲得readyRead(),然後我將執行一些其他任務,例如顯示某個消息框或啓動另一個cmd.exe或在該cmd窗口中執行另一個命令。但是,cmd窗口必須對用戶可見。Qt啓動cmd.exe

回答

0

你也可以在Qt旁邊啓用一個控制檯。

Console output in a Qt GUI app?

然後用qDebug電話把文本輸出到調試窗口或使用iostreamstd::coutstd::cin

編輯: 要顯示控制檯,在.pro中添加「CONFIG + = console」,然後在您的項目>運行設置中,一定要選中「在終端中運行」。

EDIT2:

https://www.google.com/search?q=qprocess+cmd

http://www.qtcentre.org/threads/12757-QProcess-cmd

#include <QByteArray> 
#include <QProcess> 
#include <iostream> 
#include <string> 

using namespace std; 

int main(int argc,char** argv) 
{ 
    QProcess cmd; 
    cmd.start("cmd"); 
    if (!cmd.waitForStarted()) 
     return false; 
    cmd.waitForReadyRead(); 
    QByteArray result = cmd.readAll(); 
    cout << result.data(); 

    string str; 
    getline(cin,str); 
    while(str != string("exit")) 
    { 
     cmd.write(str.c_str()); 
     cmd.write("\n"); 
     cmd.waitForReadyRead(); 
     result = cmd.readAll(); 
     cout << result.data(); 
     getline(cin,str); 
    } 
} 

我這裏測試的代碼,它可以讓你用命令行交互,並通過readyread得到輸出回(),但如果你正在使用GUI運行它,您將需要將此while循環從main移到另一個線程中。

+0

我不需要在控制檯窗口中打印任何東西。我沒有看到任何我提到的任何此類問題。我需要的只是運行一個可見的cmd.exe窗口並與之交互。 – 2013-02-20 18:10:50

+0

您希望控制檯窗口可見,但不想打印到它?你是什​​麼意思「與之互動」? – Phlucious 2013-02-20 21:01:27

1

這聽起來像你想運行一個命令行程序(或幾個),而它運行顯示輸出,然後當它完成運行其他程序。

我通常通過在主窗口中具有隻讀QPlainTextEdit來將io顯示到命令行來實現此目的。在堆上創建和connectreadyReadStandardErrorreadyReadStandardOutput信號QProcess在你的主窗口中的插槽,打印文字到您QPlainTextEdit。然後用QProcess::start的參數啓動你的命令行程序並等待它結束。一旦完成,以相同的方式開始你的下一個過程。

+0

有如何創建在Qt的造物主「的SerialPort」示例部分從QPlainTextEdit改變用途的控制檯窗口,僅供參考一個很好的例子。 – Rachael 2015-02-26 21:42:37