qt5-event事件的传递
enent事件是通过返回true或false,来决定是否传递事件,不能通过接受accept()或忽略ignore()
c.h文件
#ifndef C_H #define C_H #include <QPushButton> #include <QEvent> #include <QDebug> class C:public QPushButton { public: C(); bool event(QEvent* e); //重写event事件 }; #endif // C_H
c.cpp文件
#include "c.h" C::C() { } bool C::event(QEvent *e) { if(e->type()==QEvent::KeyPress) {qDebug()<<"C按下了键盘"; return 0; //返回false,将事件传递给父对象处理 } if(e->type()==QEvent::MouseButtonPress) {qDebug()<<"C按下了鼠标"; return 1; } //返回true,事件不传递给父对象 return QWidget::event(e); }
win.h文件
#ifndef WIN_H #define WIN_H #include <QWidget> #include <QDebug> #include "c.h" QT_BEGIN_NAMESPACE namespace Ui { class Win; } QT_END_NAMESPACE class Win : public QWidget { Q_OBJECT public: Win(QWidget *parent = nullptr); ~Win(); bool event(QEvent* e); private: Ui::Win *ui; C* mc; }; #endif // WIN_H
win.cpp文件
#include "win.h" #include "ui_win.h" Win::Win(QWidget *parent) : QWidget(parent) , ui(new Ui::Win) { ui->setupUi(this); mc=new C(); mc->setParent(this); mc->setText("AAA"); mc->move(22,22); resize(300,200); } Win::~Win() { delete ui; } bool Win::event(QEvent *e) { if(e->type()==QEvent::KeyPress) {qDebug()<<"win你按下了键盘"; } if(e->type()==QEvent::MouseButtonPress) {qDebug()<<"win你按下了鼠标"; } if(e->type()==QEvent::MouseButtonRelease) {qDebug()<<"你释放了鼠标"; } return QWidget::event(e); }
main.cpp代码
#include "win.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Win w; w.show(); return a.exec(); }
以上工程下载地址:链接:https://pan.baidu.com/s/17ULgzD3I8SfkrLC-eNbAEg 提取码:6666
事件的传递顺序
event()函数、事件过滤器、和事件处理函数的调用顺序如下:
首先按逆序调用事件过滤器,然后调用 event()函数,最后调用事件处理函数(注意:事件处理函数需在 event()函数中明确或间接调用,否则不会调用事件处理函数)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)