天天看點

cmd調用exe輸入參數_在Qt中,如何用QProcess快速實作外部程式調用

cmd調用exe輸入參數_在Qt中,如何用QProcess快速實作外部程式調用

總第14篇

本文主要詳細總結了在Qt項目開發過程中,如何借助QProcess類快速實作外部程式調用,并在此基礎上說明了相關接口的用法。通過閱讀本文你将掌握程式程序間調用的方法,以便在以後的開發過程中可以參考。

1.QProcess類及接口介紹

QProcess類是Qt中專門用于啟動一個外部程式程序并與主程式通信的。此類中包含多個靜态函數和信号,可以友善地通過信号與槽機制實作資訊互通。

我們要實作快速調用外部程式,常用的有三個接口函數:

  1. QProcess::execute()

    : 此函數是以阻塞的方式打開外部程式,隻有外部程式執行完成後,主程式才會繼續執行。外部程式的标準輸出、标準錯誤都是重定向到主程式的标準輸出和标準錯誤的。
  2. QProcess::start()

    : 此函數是以子程序的 方式打開外部程式的,外部程序與主程式互不幹擾,但外部程序的父程序就是主程式。
  3. QProcess::startDetached()

    : 此函數是以分離的方式打開外部程式的,外部程式與主程式互不幹擾,外部程序的父程序是系統的

    init

    程序。

上面三個接口函數中,

execute()

startDetached()

為靜态成員函數,

start()

函數為普通成員函數。 另外,值得注意的是,使用

start()

函數打開外部程序時,外部程序啟動後,将随主程式的退出而退出,使用回調即可以正常接收資訊;使用

startDetached()

函數打開外部程序時,外部程序啟動後,不會随主程式的退出而退出,使用回調無法正常接收到資訊。

2. 打開外部程式的應用示例

對于日常工作中,想在某項工作執行完成後,執行關機操作。這就可以使用主程式調用作業系統中的

Shutdown.exe

程序。 這裡先介紹一下

Shutdown.exe

相關的操作指令參數,在

系統指令行

中可以直接運作此程序并檢視相關參數。

cmd調用exe輸入參數_在Qt中,如何用QProcess快速實作外部程式調用

例如,我們要執行一小時後關機指令,可以寫如下代碼:

QStringList  list;  
list<< "-t" << "-s" << "3600";  
QProcess::startDetached("Shutdown.exe",list);   
// QProcess::execute("Shutdown.exe",list);  
           

我們可以建立QProcess對象,使用

start()

函數,檢視外部程序傳回的資料,輸出結果。其代碼可以寫成如下形式:

QProcess *pProces = new QProcess(this);  
connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));  
QStringList list;  
pProces->start("Shutdown.exe", list);  
  
void on_read()  
{  
  QProcess *pProces = (QProcess *)sender();  
  QString result = pProces->readAll();  
  QMessageBox::warning(NULL, "", result);  
}  
           

也可以單獨執行程式,如

route

ipconfig

等。

QProcess p(0);  
p.start("route");  
p.waitForStarted();  
p.waitForFinished();  
qDebug()<<QString::fromLocal8Bit(p.readAllStandardError());  

QProcess p(0);  
p.start("ipconfig");  
p.waitForStarted();  
p.waitForFinished();  
qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput()); 
           

也可以借助

write()

函數向外部程序中寫入相應的參數,示例如下:

QProcess p(0);  
p.start("cmd");  
p.waitForStarted();  
p.write("dirn");  
p.closeWriteChannel();  
p.waitForFinished();  
qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput()); 

//或者是這一種形式
QProcess p(0);  
p.start("cmd", QStringList()<<"/c"<<"dir");  
p.waitForStarted();  
p.waitForFinished();  
qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());  
           

我們也可以通過QProcess使用管道的功能,即一個程序的标準輸出流到目标程序的标準輸入流:

command1 | command2

。其代碼如下示例:

QProcess process1;  
QProcess process2;  
process1.setStandardOutputProcess(&process2);  //注意設定
process1.start("command1");  
process2.start("command2");
           

在項目開發過程中,要根據需求場景靈活選擇适宜的接口函數,以達到滿意的效果。

本文到此結束!

=======================================================

歡迎【

關注作者、私信作者】

。我們一起交流一起進步。

=======================================================

繼續閱讀