當前位置:編程學習大全網 - 編程軟體 - QT的事件和信號的區別

QT的事件和信號的區別

signal由具體對象發出,然後會馬上交給由connect函數連接的slot進行處理;而對於事件,Qt使用壹個事件隊列對所有發出的事件進行維護,當新的事件產生時,會被追加到事件隊列的尾部,前壹個事件完成後,取出後面的事件進行處理。但是,必要的時候,Qt的事件也是可以不進入事件隊列,而是直接處理的。並且,事件還可以使用“事件過濾器”進行過濾。總的來說,如果我們使用組件,我們關心的是信號槽;如果我們自定義組件,我們關心的是事件。因為我們可以通過事件來改變組件的默認操作。比如,如果我們要自定義壹個QPushButton,那麽我們就需要重寫它的鼠標點擊事件和鍵盤處理事件,並且在恰當的時候發出clicked()信號。

還記得我們在main函數裏面創建了壹個QApplication對象,然後調用了它的exec()函數嗎?其實,這個函數就是開始Qt的事件循環。在執行exec()函數之後,程序將進入事件循環來監聽應用程序的事件。當事件發生時,Qt將創建壹個事件對象。Qt的所有事件都繼承於 QEvent類。在事件對象創建完畢後,Qt將這個事件對象傳遞給QObject的event()函數。event()函數並不直接處理事件,而是按照事件對象的類型分派給特定的事件處理函數(event handler)。

在所有組件的父類QWidget中,定義了很多事件處理函數,如keyPressEvent()、

keyReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent ()、mousePressEvent()、mouseReleaseEvent()等。這些函數都是protected virtual的,也就是說,我們應該在子類中重定義這些函數。

  • 上一篇:ug4.0如何設置等高傾斜加工
  • 下一篇:g8分之壹螺紋車多大外徑
  • copyright 2024編程學習大全網