日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT输入输出(四)之 QProcess

發布時間:2023/12/20 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT输入输出(四)之 QProcess 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QProcess

Qt提供了一個QProcess類用于啟動外部程序并與之通信.這個類是異步工作的,而且在后臺執行,這樣用戶界面就可以始終保持響應。

?啟動一個新的進程的操作非常簡單,只需要將待啟動的程序名稱和啟動參數傳遞給start()函數即可.

例如:

QObject *parent;QString program = "tar" QStringList arguments;arguments << "czvf" << "backup.tar.gz" << "/home";QProcess *myProcess = new QProcess(parent);QProcess->start(program, arguments);

(1)當調用start()函數后,myProcess進程立即進入啟動狀態,但tar程序尚未被調用,不能讀寫標準輸入輸出設備.

(2)當進程完成啟動后就進入"運行狀態"并向外發出started()信號.在輸入輸出方面,QProcess將一個進程看做一個流類型的I/O設備,可以像使用QTcpSocket讀寫流類型的網絡連接一樣來讀寫一個進程.可以通過QIODevice::write()函數向所啟動進程的標準輸入寫數據,也可以通過QIODevice::readAll()、QIODevice::readLine()和QIODevice::getChar()函數從這個進程的標準輸出讀數據.此外由于QProcess是從QIODevice類繼承而來的,因此,它也可以作為QXmlReader

的數據在源,或者為QFtp產生上傳數據.

(3)最后,當進程退出時QProcess進入起始狀態----"非運行狀態",并發出finished()信號.

???void finished(int exitCode, QProcess::ExitStatus exitStatus)信號在參數中返回了進程退出的退出碼和退出狀態,可以調用exitCode()函數和exitStatus()函數分別獲取最后退出進程的這兩個值.其中,Qt定義的進程"退出狀態"只有正常退出和進程崩潰兩種,分別對應值QProcess::NormalExit(值0)和QProcess::CrashExit(值1).當進程在運

行中產生錯誤時,QProcess將發出error()信號,可以通過,調用error()函數返回最后一次產生錯誤的類型,并通過,state()找出此時進程所處的狀態.

?

Qt定義了如下的進程錯誤代碼:

----------------------------------------------------------------

錯誤常量 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?值????? 描述

QProcess::FailedToStart??????? 0??????進程啟動失敗

QProcess::Crashed ? ? ? ? ? ? ? 1?????? 進程成功啟動后崩潰

QProcess::Timedout ? ? ? ? ? ? ?2?????? 最后一次調用waitFor...()函數超時.此時QProcess狀態不變,并可以再次調用waitFor()類型的函數

QProcess::WriteError ? ? ? ? ? ? 3?????? 向進程寫入時出錯.如進程尚未啟動,或者輸入通道被關閉時

QProcess::ReadError ? ? ? ? ? ? 4?????? 從進程中讀取數據時出錯.如進程尚未啟動時

QProcess::UnknownError ? ? ?5??????未知錯誤.這也是error()函數返回的默認值

?

進程的標準輸出:

stdout:通常用于控制臺下輸出

stderr:通常用于進程打印錯誤

它們本質上是兩個獨立的數據流.

可以通過調用setReadChanned()函數設置當前的讀通道

當有可讀數據時Qt將發發出readyRead()信號

如果是標準輸出和標準錯誤通道中讀取數據,還會發出readyReadStandardOutput()信號

如果是標準錯誤也會發出readyReadStandardError()信號

readAllStandardOutput()函數從標準輸出通道中讀取數據

readAllStandardErrot()函數從標準錯誤通道中讀取數據

在進程啟動以前以MergedChannels參數調用setReadChannelMode()函數可以把標準輸出通道和標準輸錯誤通道合并

例如:

#include <QApplication> #include <QProcess> #include <QString> #include <iostream>int main(int argc, char *argv[]) {QApplication app(argc, argv);QProcess proc;QStringList arguments;arguments << "-na";proc.start("netstat", arguments);// 等待進程啟動if (!proc.waitForStarted()){std::cout << "啟動失敗\n";return false;}// 關閉寫通道,因為沒有向進程寫數據,沒用到 proc.closeWriteChannel();// 用于保存進程的控制臺輸出QByteArray procOutput;// 等待進程結束while (false == proc.waitForFinished()){;}// 讀取進程輸出到控制臺的數據procOutput = proc.readAll();// 輸出讀到的數據std::cout << procOutput.data() << std::endl;// 返回return EXIT_SUCCESS; }

總結

以上是生活随笔為你收集整理的QT输入输出(四)之 QProcess的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。