最近做的项目,是用QT的完成的,
在用到事件派发的时候,要用自己自定义的事件类型来满足需要。
具体就是按照Qt的官方文档说明,做了一个简单的例子,以免忘记,就先写下来保存。
首先有个CustomEvent 类,继承自QEvent
#ifndef CUSTOMEVENT_H
#define CUSTOMEVENT_H
#include <QEvent>
enum CustomEventType {
CET_1 = 900,
CET_2,
CET_3,
CET_4,
CET_5,
CET_6,
CET_7,
CET_8,
CET_9,
CET_10,
CET_NUM,
};
class CustomEvent : public QEvent
{
public:
explicit CustomEvent(int type);
public:
inline int getId() {return m_id;}
inline void setId(int id) {m_id = id;}
static int getType(CustomEventType eType);
private:
int m_id;
};
#endif // CUSTOMEVENT_H
#include "CustomEvent.h"
static const int cet1=
QEvent::registerEventType(CET_1);
static const int cet2=
QEvent::registerEventType(CET_2);
CustomEvent::CustomEvent(int type)
: QEvent(static_cast<QEvent::Type>(type))
, m_id(0)
{
}
int
CustomEvent::getType(CustomEventType eType)
{
int iRet = cet1;
switch (eType){
case CET_1:
iRet = cet1;
break;
case CET_2:
iRet = cet2;
break;
}
return iRet;
}
EventType的话,需要使用静态函数QEvent::registerEventType(int type)进行注册。用户ID的话,官方文档给出为:1000~65535这样就做好了自定义的EventType了。在使用的时候,发送事件的地方:CustomEvent* cust = new CustomEvent(CustomEvent::getType(CustomEventType::CET_1));cust->setId(15);
QApplication::sendEvent(this,cust);此为接受事件的函数: bool XXXX::event(QEvent *e) { qWarning()<<"event happened"; CustomEvent* event = static_cast <CustomEvent*> (e); if (e->type() == static_cast <QEvent::Type>(CustomEvent::getType(CustomEventType::CET_1))) { qWarning()<<"custom event"<<event->getId(); } QQuickItem::event(e); return false; }此处使用的是重载event函数进行事件处理的,当然也可以重载QObject::customEvent方法
void
QmlCustomCtrl::customEvent(QEvent *e){qWarning()<<"customEvent";CustomEvent* event = static_cast <CustomEvent*> (e);qWarning()<<"custom event"<<event->getId();}以上代码在Qt5.31上编译测试通过
FROM: http://m.blog.csdn.net/blog/nufan1982/38662391