[英]Qt thread waiting input from the GUI
我有一個QThread,可以進行大量的計算(它可以運行幾分鍾),並且在一個(且只有一個)點需要用戶輸入,例如以是/否對話的形式。 當然,沒有GUI元素可以訪問,並且沒有從線程打開對話框(Qt設計選擇),因為它不是主線程。
那么有很多明顯的解決方案,但我對“推薦”解決方案或“最佳實踐”感興趣。
我的想法:
run()
方法? 如果run()
退出,則線程死亡。 所以我在run()
函數中有這樣的東西: while (!can_continue) { sleep(); }
while (!can_continue) { sleep(); }
和予設定can_continue
在我趕上了信號發送的形式的主要的插槽。 但是,我對這是最簡單/最優雅的解決方案存在疑問。 我應該知道一般的做法嗎? 你的第二個版本的問題出現是因為你正在使用Qt線程錯誤 。
您應該創建具有信號的新對象class Worker: public QObject
:
void stage1Finished();
void stage2Fibished();
和插槽:
void startStage1();
void startStage2();
然后創建Qthread
線程對象,將Worker
推送到線程,將startStage1()
連接到線程的started()
信號,在信號stage1Finished()
上顯示對話框,並使用startStage2()
連接dialog-accepted-signal 。 連接stage2Finished
與線程的exit()
槽。
然后你不必在任何地方睡覺,所有信號處理都將通過Qthread
標准機制。 然后,您只需啟動線程即可開始處理,並在處理完成后獲得finished
信號。
在將信號連接到插槽時,請使用Qt::QueuedConnection
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.