2015-10-19 82 views
3

我發現有關自定義QEvents的多個問題。因此,自Qt 4以來,我們必須從QEvent派生並註冊我們的自定義類型。周圍有一些樣品。如何在Qt中創建自定義車輪事件?

我想要的是帶有自定義數據的QWheelEvent。所以這個活動應該可以在任何地方作爲「普通」QWheelEvent使用,但是如果我想檢查我的CustomWheelEvent類型並從中檢索數據。

問題是我不知道如何註冊該類型,因爲QWheelEvent的構造函數不提供設置事件類型的可能性。

看着QEvent的內部我可以簡單地將受保護的成員類型t設置爲由registerEventType()返回的事件類型。這是否有副作用?

如果我只是從QWheelEvent派生出來,我也可以使用dynamic_cast來找出是否是我自己的事件攜帶我的自定義數據。在檢查這個類型之後,一個簡單的靜態轉換應該會更好。

對此有何看法?


編輯:我已經想盡了辦法與dynamic_casts但劇組似乎失敗。如果Qt在內部深度複製事件,則這是可能的,以便創建新的QWheelEvent並通過事件系統而不是我的CustomWheelEvent。通過這種方式,我自己的數據(在CustomWheelEvent中定義)被剝離出來並且只處理基類(QWheelEvent)。我原本以爲指針是按原樣使用的,所以我可以依靠dynamic_cast。有關這方面的更多信息表示讚賞

+0

我想知道爲什麼下面的答案(包括我的評論)被刪除。有線程的歷史嗎?我想問作者關於他或她的原因:-) – FrozenTarzan

+0

答案的作者可以隨時刪除他的帖子。你需要10k代表看到刪除的答案。 – usr1234567

+0

謝謝...所以不會看到它looooong時間^^ – FrozenTarzan

回答

0

閱讀本: Qt: Defining a custom event type

我認爲你想要註冊的事件,這樣它會返回一個新的未使用類型(數量)。在那裏的一個例子中,靜態對象將該值設置爲QEvent :: None。我在解決方案中看到的主要問題是它不是線程安全的,因此,請確保以某種方式使此線程安全(如可能在事件啓動之前調用靜態類型方法,以便它們在可用於多線程方式)。

+0

嘿安德魯,我讀過線程,但正如我在我的問題中提到的QWheelEvent不提供訪問QEvent的構造函數。所以我不能根據需要配置內部。也許我完全不瞭解你,所以如果你能舉一個例子:-) – FrozenTarzan