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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章