[原]Qt 自定义事件

最近做的项目,是用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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值