有沒有一種安全的方式來使用Qt而不調用QApplication :: exec()?有沒有辦法在沒有QApplication :: exec()的情況下使用Qt?
我有很多不同的對象在多個資源(至少其中一個正在與Web應用程序服務器通信)上執行長壽命進程。我正在製作一個GUI應用程序,提示用戶在正確的時間輸入這些不同的進程。我希望在一個地方有我的'流'邏輯 - 確定下一步要做什麼的邏輯,而不是像對話類那樣的GUI對象。我在想我可以這樣做:
...
wait_dialog dlg;
dlg.setModal(false);
dlg.show(); // Should return...
netobject.start_long_lived_process_that_happens_on_other_thread(&completion_callback);
while (!completion_callback_called())
{
qApp->processEvents();
netobject.pump_callbacks();
magically_avoid_busywait_while_still_servicing_qt_somehow();
}
dlg.hide();
...
從Qt的角度來看,這是安全嗎?實施magically_avoid_busywait_while_still_servicing_qt_somehow()
有沒有「好」的方法?
我想在這裏完成的是以最明確的方式編寫我們的處理流程。我想一個單一的功能,這是否:
show_a_non_modal_wait_dialog()
start_some_processing_1()
wait_for_processing_1_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if (cancelled) return
show_a_non_modal_wait_dialog()
start_some_processing_2()
wait_for_processing_2_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if (cancelled) return
...
我真的想避免是蹬掉,並等待Qt控件和窗口內的處理。另外,處理對象本身完全獨立於Qt。我想我正在嘗試做的是用一個輔助回調和狀態變量在一個函數中創建一個控制器。
我想我不知道爲什麼你需要暫停事件處理。我相信設置爲0毫秒的QTimer會在gui有機會時運行,並且可以用來從其他線程收集信號以在gui線程上運行代碼並避免任何線程死亡。所以你是線程對象(QThread)可以處理它的業務,並在需要輸入時發出信號,然後停止自己。 gui線程捕獲該信號,提示用戶,給線程結果。然後該線程可以繼續。或者我誤解了? – Thadeux
我們的應用程序在Qt-bits和我們其他應用程序之間有明確的分界線。我們的大多數源文件(包括上面的主函數)都沒有通過moc工具運行,也不能發送或接收Qt信號。 –
儘管掛起QApplication的空閒時間可能會執行此功能,但這意味着該功能必須重新輸入,並且會成爲一個醜陋的狀態機器。我所希望的是一個可以從頭到尾運行的單一功能 - 這將使程序流程非常明確。 –