我在開發某個項目的時候,剛開始根據之前的開發經驗,認爲在一個函數裏面發送一個信號,而後在這個類的同一個槽函數裏面進行處理,就能達到異步效果了,因此在窗口界面顯示的時候,想要達到異步顯示的效果,就用了這個方法,發現實際沒有達到異步效果,仍是同步顯示的。數據庫
在某項目中,我在界面類的showEvent(QShowEvent * event)函數中emit 一個sigShowEvent()信號,在OnShowEventHandle()槽函數中,作了復位系統狀態,從數據庫讀取數據,轉換到界面顯示的數據,再刷新界面。這個過程在數據量較多的時候,仍是會致使界面切換的時候,加載這個界面會有點卡頓的現象。因此這方法有點問題,因此在網上找了相關信息。關於異步處理界面切換顯示:異步
(1)從新認識了異步處理以及異步處理方法。show()這個事件是在界面顯示以前被調用的,resizeEvent()這個是在界面顯示以後調用的,能夠利用界面顯示以後的事件來異步加載數據,更新界面。函數
(2)再次認識信號槽的異步和同步機制。參加文章:http://blog.csdn.net/u011014707/article/details/38041437.net
Qt::DirectConnection(直連方式)(信號與槽函數關係相似於函數調用,同步執行)線程
當信號發出後,相應的槽函數將當即被調用。emit語句後的代碼將在全部槽函數執行完畢後被執行設計
Qt::QueuedConnection(排隊方式)(此時信號被塞到信號隊列裏了,信號與槽函數關係相似於消息通訊,異步執行)對象
當信號發出後,排隊到信號隊列中,需等到接收對象所屬線程的事件循環取得控制權時才取得該信號,調用相應的槽函數。emit語句後的代碼將在發出信號後當即被執行,無需等待槽函數執行完畢。blog
(3)能夠設計一個定時器,延時加載處理。達到異步效果隊列