QEvent-Qt自定义事件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014695839/article/details/83650431

当我们需要自定义事件时,可以先创建一个类继承QEvent:

//customevent.h

#include <QEvent>

class CustomEvent: public QEvent
{
public:
    CustomEvent(int value1, double value2);
    static Type eventType;
    
    //可以定义一些成员或者函数来进行参数传递
    int getValue1();
    double getValue2();

private:
    int _value1;
    double _value2;
};

每个事件都需要有一个事件类型,而在QEvent::Type的枚举值中,User(1000)到MaxUser(65535)之间的值可被用于自定义的事件。因此,我们还要使用QEvent::registerEventType函数对自定义的事件进行注册,同时用这个注册过的值来初始化我们自定义的事件的类。

//customevent.cpp

QEvent::Type CustomEvent::eventType = (QEvent::Type)QEvent::registerEventType(QEvent::User+1);

CustomEvent::CustomEvent(int value1, double value2)
            : QEvent(Type(eventType)), _value1(value1), _value2(value2)
{

}

int CustomEvent::getValue1() { return _value1; }
double CustomEvent::getValue2() { return _value2; }

事件使用以下两个函数发送,具体区别可按F1查询

bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)

void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)

事件接收者通过重写QObject的event函数或者customEvent函数对自定义事件进行处理

#include <QObject>
#include <QDebug>

class Receiver: public QObject
{
    Q_OBJECT

public:
    Receiver();


protected:
    void customEvent(QEvent* event);
    {
        QEvent::Type eventType = event->type();

        if((eventType == CustomEvent::eventType))
         {
            /*在这里处理事件*/
             CutomEvent customEvent = dynamic_cast<CustomEvent *>(event);
             qDebug() << customEvent.getValue1();
             qDebug() << customEvent.getValue2();
            
            event->accept(); 
        }
        
    }

    bool event(QEvent* event)
    {
        QEvent::Type eventType = event->type();

        if((eventType == CustomEvent::eventType))
         {
            /*在这里处理事件*/
             CutomEvent customEvent = dynamic_cast<CustomEvent *>(event);
             qDebug() << customEvent.getValue1();
             qDebug() << customEvent.getValue2();
        }

        return QObject::event(event);
    }
    
    //重写的以上两个函数都可以处理自定义事件,可以二选一

};

例子:

Receiver receiver;

//发送事件方法1
QApplication::sendEvent(receiver, &CustomEvent(1, 2.3));

//发送事件方法2
QApplication::postEvent(receiver, new CustomEvent(1, 2.3));

猜你喜欢

转载自blog.csdn.net/u014695839/article/details/83650431