首页 > 其他分享 >【Qt】事件分发器

【Qt】事件分发器

时间:2024-09-10 22:54:28浏览次数:11  
标签:分发 函数 QObject 事件 event Qt

事件分发器

概述

        在 Qt 中,事件分发器(Event Dispatcher) 是⼀个核⼼概念,⽤于处理 GUI 应⽤程序中的事件。事件分发器负责将事件从⼀个对象传递到另⼀个对象,直到事件被处理或被取消。每个继承⾃ QObject类 或 QObject类 本⾝都可以在本类中重写 bool event(QEvent *e) 函数,来实现相关事件的捕获和拦截。

事件分发器的工作原理

        在 Qt 中,我们发送的事件都是传给了 QObject 对象,更具体点是传给了 QObject 对象的 event() 函数。所有的事件都会进⼊到这个函数⾥⾯,那么我们处理事件就要重写这个 event() 函数。event() 函数本⾝不会去处理事件,⽽是根据 事件类型(type值)调⽤不同的事件处理函数。事件分发器就是⼯作在应⽤程序向下分发事件的过程中,如下图:

事件分发器⽤于分发事件。在此过程中,事件分发器也可以做拦截操作。事件分发器主要是通过 bool event(QEvent *e) 函数来实现。其返回值为布尔类型,若为 ture,代表拦截,不向下分发。

Qt 中的事件是封装在 QEvent类 中,在 Qt 助⼿中输⼊ QEvent 可以查看其所包括的事件类型:

例子:通过事件分发器拦截鼠标按下事件

(1)在 "widget.h" 头⽂件中声明 ⿏标点击事件 和 事件分发器

(2)在 "widget.cpp" ⽂件中实现 ⿏标点击事件 和 拦截事件

(3)执行程序

标签:分发,函数,QObject,事件,event,Qt
From: https://blog.csdn.net/dab112/article/details/142001631

相关文章

  • Python Pyqt5 将ui文件转换成py文件
    命令行pyuicyour_ui_file.ui-ooutput_file.py如果是虚拟环境,则需要提前进入虚拟环境中执行pyuic命令uitopy文件的使用如果是ui文件转换过来的py文件,不要直接在此py文件中编写代码。如果你的ui文件发生变换就需要重新生成py文件,这个时候新的py文件就会覆盖历史的。正确使......
  • MQTT是什么?
    1.MQTT是什么?         MQTT协议全称是(MessageQueuingTelemetryTransport),即消息队列遥测传输协议。是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,我们知道TCP协议本身就具有高可靠性的特点,因此基于其上的MQTT协议同样......
  • PyQt GUI开发基础-1
    (目录)一、QFileDialog文件对话框控件方法说明getOpenFileName()获取一个打开文件的文件名getOpenFileNames()获取多个打开文件的文件名getSaveFileName()获取保存的文件名getExistingDirectory()获取一个打开的文件夹setAcceptMode()设置接收模式,取......
  • ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换
    1环境问题安装完Qt6,新建Qt/QtQuickCMake工程编译出现如下错误:Foundpackageconfigurationfile:Qt6Config.cmakebutitsetQt6FOUNDtoFALSEsopackage"Qt6"isconsideredtobeNOTFOUND.原因:这是因为系统中缺少OpenGL库,可以安装libgl1-mesa-dev解决方法:su......
  • QT简易右键菜单示例
    widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QMenu>classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=nullptr);~Widget();private:voidcontextMenuEvent(QContextMenuEvent*event)overri......
  • 事件发送。
    #!/usr/bin/python3#-*-coding:utf-8-*-"""ZetCodePyQt5tutorialInthisexample,wedeterminetheeventsenderobject.Author:JanBodnarWebsite:zetcode.comLastedited:August2017"""importsysfromPyQt5.QtWid......
  • Qt保存文件
      #include<QApplication>#include<QFileDialog>#include<QFile>#include<QTextStream>#include<QMessageBox>voidsaveFileWithDialog(){QStringfileName=QFileDialog::getSaveFileName(nullptr,"保存文件",&q......
  • 一觉醒来,Qt、C#界面开发的天塌了?
    再算上VC、PyQt,之前说“人生苦短,快用python”,现在要说人生苦短,快跳出泥潭!上位机、客户端界面传统开发太重,也不够美。传统开发中,还算不错的毕竟大部分场景,界面并不是核心。大量时间精力投入在交互、美观、还有各种界面类“面向对象的封装”上,实在不划算。有指针调用,搞不好点下界......
  • qt5.15.2+opencv4.10+VS2019_64 均值滤波,高斯滤波算法详细分析
    目录 一.加载图像二.灰度图像三.均值滤波1.均值滤波均值滤波算法(MeanFiltering):    参数含义:    一句话总结:均值滤波特点:应用场景:缺点:2.高斯滤波高斯滤波算法(GaussianBlur):        高斯滤波计算过程:    参数含义:    ......
  • 全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架
    全网最适合入门的面向对象编程教程:46Python函数方法与接口-函数与事件驱动框架摘要:函数是Python中的一等公民,是一种可重用的代码块,用于封装特定的逻辑;事件驱动框架是一种编程模式,它将程序的控制流转移给外部事件,如用户输入、系统消息等,它事件驱动框架可以使用函数作为事......