繼承QEvent類實現自定義事件
1.繼承自QEvent類的實現
.h檔案
#ifndef REFRESHDATAEVENT_H
#define REFRESHDATAEVENT_H
#include <QEvent>
class RefreshDataEvent:public QEvent
{
public:
RefreshDataEvent();
public:
static const Type eventType;
};
#endif // REFRESHDATAEVENT_H
cpp檔案
#include "refreshdataevent.h" const QEvent::Type RefreshDataEvent::eventType = (QEvent::Type)QEvent::registerEventType(QEvent::User + 101); RefreshDataEvent::RefreshDataEvent() :QEvent(eventType) { }
QEvent::Type不能重複,QEvent::Type是Qt中的列舉型別,Qt定義了一大堆的庫事件型別常數值,當然也允許使用者自定義自己的事件型別值,但是自定義的值應大於1000(QEvent::User),且小於65535(QEvent::MaxUser).
可以在建構函式中加入引數以實現引數傳遞。
2.傳送事件
RefreshDataEvent *refreshDataEvent = new RefreshDataEvent;
qApp->postEvent(QObject *receiver, refreshDataEvent);
傳送事件有兩個函式可用,分別是sendEvent和postEvent,兩者的區別是sendEvent是同步的,postEvent是非同步的。
3.處理事件
過載函式
void QObject::customEvent ( QEvent * event )
void Widget::customEvent(QEvent *event)
{
if(event->type() == RefreshDataEvent::eventType)
{
//do something
}
}
如果通過事件傳遞了引數,那麼需要把event變數型別轉換,RefreshDataEvent *revent = (RefreshDataEvent *)event;
這樣可以通過revent訪問其變量了。