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访问其变量了。