2013-02-27 42 views
1

製作時使用Qt的程序,我們可以有很長遞歸過程,如何避免窗口「不回答」的消息上的程序

如果是這樣,一段時間後,窗口顯示「不要回答」消息在窗口標題旁邊。

此消息可能會導致用戶認爲該程序不起作用,這是不正確的。

我該如何避免Qt中的這條消息?

回答

7

爲了保持對系統和用戶輸入的響應,將長時間運行的任務放入其自己的線程中。您可能還想向用戶提供反饋,例如進度條,因此他認爲該計劃仍在執行他所要求的一些工作。

另請參閱Threading Basics以獲取有關使用Qt的線程和Threading and Concurrent Programming Examples的一些示例的介紹。

+0

感謝您的回答,我使用了QtConcurrent :: run(),這對我想要的是完美的。 – BlueMagma 2013-02-27 10:02:54

3

如果由於循環(或遞歸函數)而導致進程花費很長時間,則可以在循環中調用QCoreApplication :: processEvents()以請求應用程序處理事件。

如果您只有一個需要很長時間的指令(例如複製大文件),則可以使用QThread或QtConcurrent。

2

儘管Olaf的回答很好,但更簡單的方法是在代碼中撒上QCoreApplication::processEvents()

從文檔:

進程調用線程的所有等待事件根據 指定的標誌,直到有沒有更多的事件來處理。當程序忙於執行 長操作(例如,複製文件)時,您可以偶爾調用此函數 。