2012-09-22 73 views
2

我對Qt事件的一般用法有一些疑問。我是Qt新手,我將嘗試製作自定義事件。我問的問題與此相關的文章:Qt 4.8: The Event SystemQt中的事件如何工作?

  • 何時事件「發生」?
    在Qt的內置事件中,鼠標點擊和按鍵被放入隊列中,然後在下一幀執行函數。對於自定義事件,我特別想知道這一點,因爲我不確定點擊鼠標時是否總是出現這種情況。對於自定義事件,是否將事件發送到隊列中,然後等待下一幀的event()函數處理?

  • 要創建自定義事件,您是否必須創建一個從QEvent繼承的類,並使用registerEventType()函數註冊一個事件?
    這是標準過程,還是事件只是一個類?這個函數registerEventType()如何工作?

  • 自定義事件是否有QEvent :: Type?
    這是使用registerEventType()函數時給出的介於1000和6563之間的數字嗎?

  • 什麼是事件的接收者?
    它似乎在函數的參數像postEvent(),sendEvent()等,但是,我不知道這個對象是什麼。

  • 事件發生時執行的實際代碼在哪裏?
    它是一個函數,還是它在QObject的event()函數中。


同樣的Qt事件的任何工作實例(包括內置或自定義)的行動將是有益的。

回答

-1

你應該看Qt Examples在線或在QtSDK中,它們有很多。 海事組織你沒有努力搜索。

Ad.1。它在你使用QApplication :: postEvent()或QApplication :: sendEvent()啓動後發生。當然不是當然的,因爲它必須通過主循環等等。但是事件的順序應該被保留。

Ad.2。看看this,第二名。

Ad.3。轉到Ad.2。

Ad.4。該對象將在QObject :: customEvent()處理程序中接收此自定義事件。

Ad.5。轉到Ad.4。

+0

當你說「主循環」時,是否每秒運行一次循環來調用通過事件放入隊列的函數? – ZERO

+0

像任何其他GUI程序一樣的Qt程序有一個主循環。你看不到它,但它存在於QApplication :: exec()函數中。它捕獲所有類型的事件(內部和外部)並按發生順序調用適當的處理程序。我不確定你的問題是什麼,說實話;)只是開火你的事件,並抓住他們。沒什麼大不了。 – cubuspl42

+0

謝謝,現在幾乎所有東西都有意義。不幸的是,在QEvents的鏈接中沒有任何示例。可以說我想通過QEvent :: registerEventType()註冊一個事件。這個功能如何「註冊」一個事件?該課程是否跟蹤1000到65535之間的未註冊枚舉的私有數組?這個新的枚舉添加到QEvent :: Type下的枚舉列表中,所以我可以做類似QEvent :: CustomEvent的事情? – ZERO