Qt中如何向一個對象A投遞事件E?按照下面三個步驟即可:
1 A是QObejct或者QObject子類的對象;
2 E是QEvent或者QEvent子類的對象;
3 客戶端調用A.event(&E)。
代碼應該是這樣的:
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 投遞事件
QObject A;
QEvent E(QEvent::MouseButtonPress);
A.event(&E);
return a.exec();
}
解析:
在Qt框架中,事件被定義爲一個對象,事件類繼承於QEvent類,事件表示應用程序內部已經發生的事情或者應用程序需要知道的外部活動的結果。事件可以被任意QObject及其子類的實例接收和處理。
上述代碼中,A是QObject對象;E是QEvent對象,我們將E構造爲“鼠標按鍵點擊”的事件;調用bool QObject::event(QEvent *e)接口,完成事件投遞。
特別說一下事件類型,Qt中有很多種事件類型,如鼠標事件、鍵盤事件、窗口事件等等,這些事件都繼承於QEvent,每種事件都有一個QEvent::Type類型的編號,通過這個編號,接受者可以識別事件種類。比如上述代碼中:
QEvent E(QEvent::MouseButtonPress);
通過QEvent構造函數的參數QEvent::MouseButtonPress構建了一個“按鼠標按鍵”的事件。
QEvent::Type就是一個整數,系統保留了0~999編號,用戶可以自定義1000~65535編號的事件。1000對應着QEvent::User常量,QEvent::MaxUser對應65535。
在自定義事件編號時,推薦使用int QEvent::registerEventType(int hint = -1)方法,將自定義用戶編號作爲參數傳入該接口,如果參數有效,則返回該該參數;如果參數不能使用則返回系統自動分配的編號;如果所有的編號都不可用則返回-1。