QT笔记——QT自定义事件

本文介绍了Qt中自定义事件的创建、注册、发送和处理方法。创建自定义事件需继承QEvent,事件类型在QEvent::User和QEvent::MaxUser之间,可使用sendEvent()和postEvent()发送。注册有两种方法,发送分异步和阻塞。处理可重写customEvent或使用eventFilter,同时指出post局部变量会出错。

我们有时候想发送自定义事件

1:创建自定义事件,首先我们需要知道它的条件

1:自定义事件需要继承QEvent
2:事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间,在QEvent::User之前 是预留给系统的事件
3:使用sendEvent() 和 postEvent()发送自定义消息
4:接受自定义消息,通过 重写 customEvent 或者 使用 eventFilter事件 来处理

2:注册自定义事件ID

在注册自定义事件的时候我们有两种方法
一:使用QEvent::registerEventType(),这个是系统会帮助我们注册ID,如果错误 返回-1
二:我们自定义 取QEvent::User 和QEvent::MaxUser 之间的值

在这里插入图片描述

方法一:
QEvent::Type CustomEvent::m_eventType = (QEvent::Type)QEvent::registerEventType();

方法二:
const int CustomEventBaseID = QEvent::User;
const int TextEventID = CustomEventBaseID + 1;

3:自定义事件

class CustomEvent :public QEvent
{
   
   
public:
    CustomEvent();
    virtual ~CustomEvent();
    
	static QEvent::Type eventType();
private:
	static QEvent::Type m_eventType;
};
QEvent::Type CustomEvent::m_eventType = (QEvent::Type)QEvent::registerEventType();//1、注册自定义事件类型

CustomEvent::CustomEvent()
	:QEvent(eventType()) //2、指定事件类型
{
   
   

}

CustomEvent::~CustomEvent()
{
   
   

}

QEvent::Type CustomEvent::eventType()
{
   
   
	return m_eventType;
}

4:发送自定义事件

postEvent 方法:异步发送,向事件队列中 的发送一个指定接受者事件
不需要手动释放事件的内存,QT框架自动释放

在这里插入图片描述

sendEvent方法:此方法是阻塞发送的,它发送对象事件,等待对象处理结束返回;
需要手动释放事件的内存

在这里插入图片描述

5:自定义事件处理

写自定义事件 void customEvent(QEvent* event) override;

写事件过滤器 bool eventFilter(QObject* watched, QEvent* event) override;
还需要将对象添加到事件过滤器中

源码:
.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_CustomEventTest.h"
#include <QEvent>
#include <QDebug>

//自定义事件
class CustomEvent :public QEvent
{
   
   
public:
    CustomEvent();
    virtual ~CustomEvent();

    void SetText(const QString& str);
    QString GetText() const;

	void SetNumber(int number);
	int GetNumber() const;

	static QEvent::Type eventType();
private:
    QString m_str;
    int m_number;

	static QEvent::Type m_eventType;
};

class CustomTwoEvent :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值