当前位置: 首页 > wzjs >正文

做兼职设计去哪个网站网站信息备案变更 哪里做

做兼职设计去哪个网站,网站信息备案变更 哪里做,dw怎么做网站教程,湖北省城建设计院网站事件冒泡是 GUI 框架中常见的概念,但 Qt 的事件处理机制略有不同。在 Qt 中,事件传递分为两个阶段:自顶向下的过滤阶段和自底向上的处理阶段。下面结合代码示例详细说明: 一、Qt 事件传递的完整流程 1. 过滤阶段(自顶…

事件冒泡是 GUI 框架中常见的概念,但 Qt 的事件处理机制略有不同。在 Qt 中,事件传递分为两个阶段自顶向下的过滤阶段自底向上的处理阶段。下面结合代码示例详细说明:

一、Qt 事件传递的完整流程

1. 过滤阶段(自顶向下)

事件首先通过过滤器链传递,顺序为:

  1. 全局过滤器(QApplication::installEventFilter)
  1. 父对象链过滤器(从最顶层父对象到直接父对象)
  1. 目标对象自身过滤器

关键点

  • 任何过滤器都可以通过返回 true 拦截事件,阻止其继续传递。
  • 如果所有过滤器都返回 false,事件进入处理阶段
2. 处理阶段(自底向上)

事件到达目标对象后,通过事件处理函数链传递,顺序为:

  1. 目标对象的 event() 函数
  1. 目标对象的特定事件处理函数(如 mousePressEvent())
  1. 父对象链的 event() 函数(如果目标对象未处理事件)

关键点

  • 事件处理函数通过返回 true 表示事件已处理,通常无需手动返回(默认行为由 Qt 处理)。
  • 如果事件未被处理,会向上传递给父对象,直到被处理或丢弃。

二、示例代码:演示过滤与处理顺序

 

#include <QApplication>

#include <QMainWindow>

#include <QPushButton>

#include <QDebug>

// 全局过滤器

class GlobalFilter : public QObject {

public:

explicit GlobalFilter(QObject *parent = nullptr) : QObject(parent) {}

bool eventFilter(QObject *obj, QEvent *event) override {

qDebug() << "全局过滤器: " << obj->objectName() << " - " << event->type();

return false; // 放行事件

}

};

// 自定义按钮类(重写事件处理函数)

class MyButton : public QPushButton {

Q_OBJECT

public:

explicit MyButton(const QString &text, QWidget *parent = nullptr)

: QPushButton(text, parent) {

setObjectName("Button");

installEventFilter(this); // 为自身安装过滤器

}

protected:

// 按钮自身的过滤器

bool eventFilter(QObject *obj, QEvent *event) override {

if (obj == this && event->type() == QEvent::MouseButtonPress) {

qDebug() << "按钮过滤器: 鼠标按下";

// return true; // 取消注释此行可拦截事件

}

return QPushButton::eventFilter(obj, event);

}

// 按钮的事件处理函数

void mousePressEvent(QMouseEvent *event) override {

qDebug() << "按钮处理器: 鼠标按下";

QPushButton::mousePressEvent(event);

}

// 按钮的 event() 函数

bool event(QEvent *event) override {

if (event->type() == QEvent::MouseButtonPress) {

qDebug() << "按钮 event(): 鼠标按下";

}

return QPushButton::event(event);

}

};

// 自定义窗口类(重写事件处理函数)

class MainWindow : public QMainWindow {

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {

setObjectName("MainWindow");

installEventFilter(this); // 为自身安装过滤器

MyButton *button = new MyButton("点击我", this);

button->move(50, 50);

}

protected:

// 窗口的过滤器

bool eventFilter(QObject *obj, QEvent *event) override {

if (event->type() == QEvent::MouseButtonPress) {

qDebug() << "窗口过滤器: " << obj->objectName() << " - 鼠标按下";

// return true; // 取消注释此行可拦截按钮事件

}

return QMainWindow::eventFilter(obj, event);

}

// 窗口的事件处理函数

void mousePressEvent(QMouseEvent *event) override {

qDebug() << "窗口处理器: 鼠标按下";

QMainWindow::mousePressEvent(event);

}

// 窗口的 event() 函数

bool event(QEvent *event) override {

if (event->type() == QEvent::MouseButtonPress) {

qDebug() << "窗口 event(): 鼠标按下";

}

return QMainWindow::event(event);

}

};

int main(int argc, char *argv[]) {

QApplication app(argc, argv);

// 安装全局过滤器

GlobalFilter globalFilter;

app.installEventFilter(&globalFilter);

MainWindow window;

window.resize(300, 200);

window.show();

return app.exec();

}

#include "main.moc"

三、点击按钮时的事件流程

1. 过滤阶段(自顶向下)
 

全局过滤器: Button - QEvent::MouseButtonPress

窗口过滤器: Button - 鼠标按下

按钮过滤器: 鼠标按下

2. 处理阶段(自底向上)
 

按钮 event(): 鼠标按下

按钮处理器: 鼠标按下

关键观察点
  1. 过滤器顺序:全局 → 窗口 → 按钮(自顶向下)。
  1. 处理器顺序:按钮 event() → 按钮 mousePressEvent()(自底向上)。
  1. 拦截效果
    • 若窗口过滤器返回 true,事件被拦截,按钮不会收到任何通知。
    • 若按钮过滤器返回 true,事件被拦截,按钮的 event() 和 mousePressEvent() 不会被调用。

四、与事件冒泡的对比

特性

Qt 事件机制

传统事件冒泡(如 HTML/JS)

过滤阶段

自顶向下(全局 → 父 → 子)

处理阶段

自底向上(子 → 父)

自底向上(子 → 父)

拦截方式

过滤器返回 true

event.stopPropagation()

默认行为

可通过 event->ignore() 向上传递

自动冒泡,需手动阻止

五、总结

Qt 的事件处理机制可概括为:

  1. 过滤阶段:自顶向下,通过过滤器链拦截事件。
  1. 处理阶段:自底向上,通过事件处理函数链处理事件。

理解这两个阶段的顺序和交互,是实现复杂界面交互的关键。例如:

  • 全局快捷键(全局过滤器)
  • 控件行为定制(对象自身过滤器)
  • 父容器统一处理子控件事件(父对象过滤器)

通过合理组合过滤器和事件处理函数,可以精确控制事件的流向和处理方式。


文章转载自:

http://hcLoBEcM.wtbzt.cn
http://q2Yk0JTB.wtbzt.cn
http://CsLkYdtg.wtbzt.cn
http://y8PV4mWY.wtbzt.cn
http://0GuuQMON.wtbzt.cn
http://Fe6ROHHZ.wtbzt.cn
http://vsczYPal.wtbzt.cn
http://DpzYvo1t.wtbzt.cn
http://OQXnhQg0.wtbzt.cn
http://uRLN9PgH.wtbzt.cn
http://r2xw0Zlw.wtbzt.cn
http://8OtdxHU9.wtbzt.cn
http://exfDRkTU.wtbzt.cn
http://46FnOW6j.wtbzt.cn
http://AN7SJvmY.wtbzt.cn
http://Pj3eYU2H.wtbzt.cn
http://CY9sIrDJ.wtbzt.cn
http://tYUE41Rp.wtbzt.cn
http://s5WpUWfh.wtbzt.cn
http://ZStIYm7K.wtbzt.cn
http://0gHmL02X.wtbzt.cn
http://RIy6YrxG.wtbzt.cn
http://z90G55Hi.wtbzt.cn
http://QFBHA7wI.wtbzt.cn
http://f2Vru7WV.wtbzt.cn
http://rDu3LJp1.wtbzt.cn
http://6kFLcwvT.wtbzt.cn
http://7eTNIfeV.wtbzt.cn
http://99F1G1s4.wtbzt.cn
http://B07vyDZb.wtbzt.cn
http://www.dtcms.com/wzjs/612366.html

相关文章:

  • 网站建设综合实训ppt模板网站建设的想法和意见
  • 北辰集团网站建设培训网站建设公司哪家好
  • 大兴网站定制开发教育网站开发报告
  • 免费搭建微信网站设计php 网站发布
  • 电商运营和网站运营对比网站建设价格受哪些影响
  • 苏州市建设局招标网站首页提供网站建设方案服务
  • 上海高端点网站建设制作公司有哪些?|网站建设品牌形象网站有哪些
  • 怎么删除网站里的死链接wordpress 存储空间
  • 公司网站服务器优化论坛seo招聘
  • 网站优化技术东莞拓步网站建设
  • 专做热血电影的网站php企业网站cms
  • 清远住房和城乡建设部网站无锡网站优化建站
  • 网站地图怎么做XML怎么做自适应的网站
  • 怎么做网站排名优化做网赌需要在哪些网站投广告
  • 舟山市建设工程造价管理协会网站北京建王园林工程有限公司
  • 吉林省网站制作公司有哪些注册公司需要多少钱保证金
  • 怎么网上注册公司wordpress 优化加速
  • 山东做外贸网站的公司网站建设属于哪类工作
  • 做网站项目前怎么收集需求做网站需要招什么条件
  • 自己怎做网站子域名大全
  • 深圳下周一居家办公宁波优化seo软件公司
  • 百度网站权重排行在百度上做网站
  • 大连百姓网免费发布信息网站网络服务器配置与管理考试题
  • app网站模板wordpress 点赞按钮
  • 外贸网站建设公司排名wordpress 如何安装
  • wordpress 图片显示插件下载网站排名seo软件
  • 一个主机建多少个网站网站备案 停站
  • 微信怎么建设自己网站张家港网站推广优化
  • 东莞品牌整合营销seo是什么意思网络用语
  • 婚庆手机版网站建设宿州网站开发建设