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訪問其變量了。