QProcess使用思考

2021-06-22 04:43:16 字數 1529 閱讀 4675

我想用qprocess cmd建立幾個程序,在乙個while迴圈裡,給出一定的判斷條件,我希望判斷cmd.state(),然後看它如果notrunning或者用它的exitstatus來判斷是否正常完成前乙個程序,以此決定是否進行下一步。但是我發現,乙個問題,如果用while(cmd.status() == qprocess::running) 的話,永遠都會出現the process has already started的警告。。然後退出。如果用另一種方式,設定乙個bool running = true; 然後在processfinished(..)函式裡面再賦值為false, 然後while(running)的話,程式就會直接死掉。搞不懂啊搞不懂……

最後,靈感突發,我用qdebug()來測試一下之執行乙個程序的情況。結果發現,前面的折騰都是瞎折騰,在on_runbtn_clicked() 程式中,不論何處的cmd.status()都是starting,只有當跳出這個函式才執行qprocess程序,然後到達processfinished(...)函式時,cmd.status()就已經是notrunning了,也就是說,前面的while迴圈裡,根本沒有捕捉到process的訊號,因為這個訊號還在starting,根本沒有開始執行。。我百了很多資料,也看了書,就是無法找到根源。最後實在沒辦法,帶著問題睡覺覺。。神奇的是,前天晚上居然半夜裡醒來,腦袋裡一直盤旋著qprocess,程序,通訊,這個問題…………

昨天,一怒之下,決定徹底還一種思路來解決這個問題,不就是乙個系統嘛,又不是rocket science。突然想到乙個辦法,既然不能在on_runbtn_clicked() 程式中解決掉多個程序的依次呼叫問題,不如把問題放在processfinished(...)函式中,給類增添乙個成員變數作為判定程序佇列中是否還有需要執行的步驟,如果沒有,就結束呼叫cmd,如果有,就直接呼叫下乙個程序。如此一來,輕鬆除錯便徹底解決了問題。。oh my ga。。。這惱了我接近一周的問題啊,終於又被我克服了。

下面又要發一番感慨陳詞了:

其實寫程式和對待人生中的困難是一樣的,曲徑通幽,還一種思維思考問題,或許表面上看起來那並不是最合理的方法,但是往往卻能真正解決問題。以後遇到任何問題一定要繼續這種策略,一定能讓我少走更多彎路。自己

以下貼一點**備忘(摘自:這個童鞋的**簡潔明瞭,可以解決問題:

connect(&mprocess, signal(readyreadstandardoutput()), this,    slot(redfromstdout()));

connect(&mprocess, signal(readyreadstandarderror()), this,    slot(redfromstderr()));

connect(&mprocess, signal(error(qprocess::processerror)), this, slot(processerror(qprocess::processerror)));

connect(&mprocess, signal(finished(int,qprocess::exitstatus)), this, slot(processfinished(int,qprocess::exitstatus)));

Qt使用,Qprocess啟動外部程式

主程式 將要呼叫第三方程式的程式,呼叫 在該程式裡面 外部程式 被主程式啟動的程式,為.exe格式,參考資料一 參考資料二 qt官網資料 啟動外部程式並獲取外部程式輸出 qt學習之路 58 程序間互動 qprocess總結 qprocess類提供了三個介面函式用於啟動外部程式,分別是 qproces...

qt中的QProcess的使用總結

參考部落格 1 2 一 這邊注意區分兩個啟動的時候start和startdetached 1 start 的時候你的主程式結束的時候,呼叫的外部程式也會結束 2 startdetached 的時候你的主程式雖然被關閉,但是呼叫的外部程式並不會結束,也就是開啟之後兩者的關聯性會消失 二 判斷當前程式是...

QT中呼叫外部程式 QProcess的使用

本文 http blog.csdn.net waderchan archive 2009 05 19 4199913.aspx 執行介面如下 程式共包含以下有乙個檔案 view plain copy to clipboard print?main.cpp include process.h incl...