Qt 自定義事件

2022-05-22 05:36:06 字數 1511 閱讀 7392

qt 自定義事件很簡單,同其它類庫的使用很相似,都是要繼承乙個類進行擴充套件。在 qt 中,你需要繼承的類是 qevent。

繼承qevent類,你需要提供乙個qevent::type型別的引數,作為自定義事件的型別值。這裡的qevent::type型別是qevent裡面定義的乙個enum,因此,你是可以傳遞乙個int的。重要的是,你的事件型別不能和已經存在的type值重複,否則會有不可預料的錯誤發生!因為系統會將你的事件當做系統事件進行派發和呼叫。在qt中,系統將保留0 - 999的值,也就是說,你的事件type要大於999. 具體來說,你的自定義事件的type要在qevent::user和qevent::maxuser的範圍之間。其中,qevent::user值是1000,qevent::maxuser的值是65535。從這裡知道,你最多可以定義64536個事件,相信這個數字已經足夠大了!但是,即便如此,也只能保證使用者自定義事件不能覆蓋系統事件,並不能保證自定義事件之間不會被覆蓋。為了解決這個問題,qt提供了乙個函式:registereventtype(),用於自定義事件的註冊。該函式簽名如下:

static

int qevent::registereventtype ( int hint = -1 );

函式是static的,因此可以使用qevent類直接呼叫。函式接受乙個int值,其預設值為-1,返回值是建立的這個type型別的值。如果hint是合法的,不會發生任何覆蓋,則會返回這個值;如果hint不合法,系統會自動分配乙個合法值並返回。因此,使用這個函式即可完成type值的指定。這個函式是執行緒安全的,因此不必另外新增同步。

你可以在qevent子類中新增自己的事件所需要的資料,然後進行事件的傳送。qt中提供了兩種傳送方式:

qmouseevent event(qevent::mousebuttonpress, pos, 0, 0, 0

);這個物件不需要手動delete,qt會自動delete掉!因此,如果在post事件之後呼叫delete,程式可能會崩潰。另外,postevent()函式還有乙個過載的版本,增加乙個優先順序引數,具體請參見api。通過呼叫sendpostedevent()函式可以讓已提交的事件立即得到處理。

如果要處理自定義事件,可以重寫qobject的customevent()函式,該函式接收乙個qevent物件作為引數。注意,在qt3中這個引數是qcustomevent型別的。你可以像前面介紹的重寫event()函式的方法去重寫這個函式:

void customwidget::customevent(qevent *event

)

另外,你也可以通過重寫event()函式來處理自定義事件:

bool customwidget::event(qevent *event

)

return qwidget::event(event

);}

這兩種辦法都是可行的。

出處:另附qt中globalcolor**:

Qt 自定義事件

最近做的專案,是用qt的完成的,在用到事件派發的時候,要用自己自定義的事件型別來滿足需要。具體就是按照qt的官方文件說明,做了乙個簡單的例子,以免忘記,就先寫下來儲存。首先有個customevent 類,繼承自qevent ifndef customevent h define customeven...

Qt 自定義事件

關於qt的自定義事件也是看了幾個大牛的部落格。總結下心得,如有錯誤請指出。一起成長。先給原始碼。也是第一次原創啊,不知道怎麼寫,呵呵。include include class mywidget public qwidget static const int mycustomeventtype 10...

Qt自定義視窗事件

一 移動主介面 移動主介面是通過按住滑鼠左鍵進行標題欄拖動最終導致主介面移動 由於還有視窗伸縮功能,因此對於標題欄左部,頂部,右部應該騰出5畫素空間給視窗伸縮功能使用,即滑鼠移動到這5畫素空間之內的話,滑鼠形狀就會發生改變 暗示可以伸縮視窗 為什麼只有標題欄騰出5畫素空間,而其他部件 如工具欄 內容...