Qt event事件发送

阻塞型事件发送

需要重写接收对象的event()事件处理函数

当事件发送后,将会立即进入event()事件处理函数进行事件处理

通过sendEvent()静态函数实现阻塞发送:

bool QApplication::sendEvent ( QObject * receiver, QEvent * event ) ;
// receiver:接收对象, event :要发送的event类型(比如:鼠标双击)
//当有事件发送,将会调用receiver对象里的event()成员函数进行事件处理

sendEvent()函数是阻塞式的

new分配的事件对象被处理后,会由Qt内部自动摧毁

非阻塞型事件发送

需要重写接收对象的event()事件处理函数

当事件发送后立即返回,事件将会发送到事件队列中等待处理

通过postEvent()静态函数实现非阻塞发送:

void QApplication::postEvent ( QObject * receiver, QEvent * event );

new分配的事件对象被处理后,会由Qt内部自动摧毁

自定义事件

Qt 自定义事件很简单,同其它类库的使用很相似,都是要继承一个类进行扩展。在 Qt 中,你需要继承的类是 QEvent。

继承QEvent类,你需要提供一个QEvent::Type类型的参数,作为自定义事件的类型值。这里的QEvent::Type类型是QEvent里面定义的一个enum,因此,你是可以传递一个int的。重要的是,你的事件类型不能和已经存在的type值重复,否则会有不可预料的错误发生!因为系统会将你的事件当做系统事件进行派发和调用。在Qt中,系统将保留0 – 999的值,也就是说,你的事件type要大于999. 具体来说,你的自定义事件的type要在QEvent::User和QEvent::MaxUser的范围之间。其中,QEvent::User值是1000,QEvent::MaxUser的值是65535。从这里知道,你最多可以定义64536个事件,相信这个数字已经足够大了!但是,即便如此,也只能保证用户自定义事件不能覆盖系统事件,并不能保证自定义事件之间不会被覆盖。为了解决这个问题,Qt提供了一个函数:registerEventType(),用于自定义事件的注册。该函数签名如下:

static int QEvent::registerEventType ( int hint = -1 );

函数是static的,因此可以使用QEvent类直接调用。函数接受一个int值,其默认值为-1,返回值是创建的这个Type类型的值。如果hint是合法的,不会发生任何覆盖,则会返回这个值;如果hint不合法,系统会自动分配一个合法值并返回。因此,使用这个函数即可完成type值的指定。这个函数是线程安全的,因此不必另外添加同步。

h
https://zhuanlan.zhihu.com/p/630751403

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QLabel>
#include <QEvent>
#include <QDebug>class MyEvent: public QEvent
{
public:MyEvent(QEvent::Type type):QEvent(type){}void setMessage(int message){m_message = message;}int GetMessage(){return m_message;}void SetStr(QString str){m_str = str;}QString GetStr(){return m_str;}private:int m_message;QString m_str;
};class TestLabel: public QWidget
{
public:TestLabel(QString str="111", QWidget* parent=0):QWidget(parent){label = new QLabel(str,this);}
protected:bool event(QEvent* ev){MyEvent* myev = (MyEvent*)ev;if(myev->type() == QEvent::User){QString str = myev->GetStr();label->setText(str);}return true;}
private:QLabel* label;
};class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();
protected slots:void OnClicked(bool);
private:TestLabel* label1;TestLabel* label2;int number=0;
};#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <iostream>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{label1 = new TestLabel("label1", this);label2 = new TestLabel("label2", this);label2->move(0,100);QPushButton* btn = new QPushButton("btn",this);btn->move(300,0);connect(btn,SIGNAL(clicked(bool)), this, SLOT(OnClicked(bool)));
}MainWindow::~MainWindow()
{}void MainWindow::OnClicked(bool bl)
{QEvent::Type type = QEvent::User;MyEvent myev(type);myev.SetStr(QString::number(number++));qDebug()<<"type:"<<type;if(number%2 == 0){QApplication::sendEvent(label1, &myev);}else{QApplication::sendEvent(label2, &myev);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue篮球联盟管理系统源码

&#x1f345; 简介&#xff1a;500精品计算机源码学习 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学习内容欢迎交流&#xff1a; 二、文档资料截图&#xff1a; 三、项目技术栈 四、项目运行图 背景&#xff1a; 篮球运…

对比分析:黑盒测试 VS 白盒测试

一、引言 在软件开发过程中&#xff0c;测试是确保产品质量的关键环节。其中&#xff0c;黑盒测试和白盒测试是两种常见的测试方法。本文将详细解析这两种测试方法的定义、特点&#xff0c;同时通过具体示例进行对比分析。 二、黑盒测试 黑盒测试&#xff0c;又称功能测试&…

社区分享|简米Ping++基于MeterSphere开展异地测试协作

上海简米网络科技有限公司&#xff08;以下简称为“简米”&#xff09;是国内开放银行服务商&#xff0c;高新技术企业&#xff0c;中国支付清算协会会员单位。自2014年成立至今&#xff0c;简米长年聚焦金融科技领域&#xff0c;通过与银行、清算组织等金融机构合作&#xff0…

uni-app详解、开发步骤、案例代码

uni-app概念 uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序、快应用等多个平台。它允许开发者使用一套代码同时构建多个平台的应用程序,包括iOS、Android、H5、微信小程序、支付宝小程序、百度小…

java基础进阶之数组排序-可能有你不知道的哦!!

1、使用Arrays类的sort方法 1.1、默认升序 java中Arrays类提供了sort方法来进行快速排序&#xff0c;默认是升序的。 Arrays.sort(数组名) private static void ArrSort1(int[] arr) {Arrays.sort(arr);System.out.println("快速排序-默认升序:"Arrays.toString(arr…

【PyTorch】多项式回归

文章目录 1. 模型与代码实现1.1. 模型1.2. 代码实现1.2.1. 完整代码1.2.2. 输出结果 2. Q&A2.1. 欠拟合与过拟合 1. 模型与代码实现 1.1. 模型 将多项式特征值预处理为线性模型的特征值。即 y w 0 w 1 x w 2 x 2 ⋯ w n x n y w_0w_1xw_2x^2\dotsw_nx^n yw0​w1​…

开关电源超强总结

什么是Power Supply? 开关电源的元件构成 三种基本的非隔离开关电源 三种基本的隔离开关电源 反激变换器&#xff08;Flyback&#xff09;工作原理 &#xff08;电流连续模式&#xff09; 反激变换器&#xff08;Flyback&#xff09;工作原理 &#xff08;电流断续模式&#x…

js中批量修改对象属性

首先&#xff0c;有这个对象 let a {id: 1,name: 张三,age: 18,sex: 0 } 需求&#xff1a;同时修改name,id,并添加一个新属性c 常规写法&#xff1a; a.id 2; a.name 李四; a.c 1; 方法1&#xff1a;使用Object.assign() Object.assign()常用来拷贝合并对象,相同属性…

信息化系列——企业信息化建设(3)

期待已久的对策&#xff0c;马上”出炉“&#xff0c;第一次看的朋友&#xff0c;建议现在主页看看&#xff08;1&#xff09;和&#xff08;2&#xff09;&#xff0c;那咱们就废话少说了&#xff0c;开始今天的正题。 企业信息化建设对策 1、增强企业信息化意识 企业管理者…

【Python】Python读Excel文件生成xml文件

目录 ​前言 正文 1.Python基础学习 2.Python读取Excel表格 2.1安装xlrd模块 2.2使用介绍 2.2.1常用单元格中的数据类型 2.2.2 导入模块 2.2.3打开Excel文件读取数据 2.2.4常用函数 2.2.5代码测试 2.2.6 Python操作Excel官方网址 3.Python创建xml文件 3.1 xml语法…

简单选择排序显示第K趟

感悟&#xff1a;一定要小心细节&#xff0c;循环中注意要是否需要重新赋值 #include <stdio.h> int main() { int c 0; int b 0; int n 0; int k 0; int i 0; int j 0; int max 0; int z 0; int i1 0; int temp 0; …

PACS源码,医学影像传输系统源码,全院级应用,支持放射、超声、内窥镜、病理等影像科室,且具备多种图像处理及三维重建功能

​三维智能PACS系统源码&#xff0c;医学影像采集传输系统源码 PACS系统以大型关系型数据库作为数据和图像的存储管理工具&#xff0c;以医疗影像的采集、传输、存储和诊断为核心&#xff0c;集影像采集传输与存储管理、影像诊断查询与报告管理、综合信息管理等综合应用于一体的…

GUAVA 工具类

Guava是一个Google的开源Java库&#xff0c;常用的工具&#xff1a; 集合工具类&#xff0c;包括Lists&#xff08;创建&#xff1a;newArrayList、newLinkedList等&#xff09;、Sets&#xff08;创建&#xff1a;newHashSet、newLinkedHashSet等&#xff09;和Maps&#xff…

破阵子(三分+凸包旋转卡壳)

Description 平面上有n个点&#xff0c;每个点有各自的速度向量&#xff0c;现在给出0时刻&#xff0c;在同一时刻&#xff0c;平面点的最远距离叫做special dis 他们每个点的位置和每个点的速度向量&#xff0c;现在求在哪个时刻的时候&#xff0c;他们的special dis 最小&am…

postgres(pg)数据库使用建表语句创建数据表

一般创建数据表有两种方式&#xff0c;一种是使用建表语句&#xff0c;二是使用图形化工具建表&#xff08;如&#xff1a;pgadmin4、Navicat、DataGrip、dbeaver等等之类的工具&#xff09;&#xff1b; 1、使用建表语句创建数据表&#xff1a; -- 建立学生测试表语句如下&am…

Java问题和解决方案汇总

将其他类型转换成数值类型的解决方案 例&#xff1a;Integer转成Double类型 Double.parseDouble(a.toString()); 嵌套Map中&#xff0c;拿到里层Map的value(例&#xff1a;Map.get("xxx").get("xxx")) 主要的目的是为了得到第二个get&#xff0c;只要将第一…

接口测试:轻松掌握基础知识,快速提升测试技能!

1.client端和server端 开始接口测试之前&#xff0c;首先搞清楚client端与server端是什么&#xff0c;区别。 web前端&#xff0c;顾名思义&#xff0c;指用户可以直观操作和看到的界面&#xff0c;包括web页面的结构&#xff0c;web的外观视觉表现及web层面的交互实…

顶级设计师力荐的界面设计软件,设计新选择

即时设计 作为专业的在线协作UI设计软件&#xff0c;即时设计可以实现视觉效果、交互效果、体验效果一站成型&#xff0c;为你的目标用户创造流畅体验。 轻松绘制原型&#xff1a;借助社区设计资源和原型模板的即时设计&#xff0c;开始敏捷高效的工作。与产品经理分解用户需…

E. Good Triples

首先 如果产生进位的话是一定不对的&#xff0c;因为进位会给一个1&#xff0c;但是损失了10 然后可以按位直接考虑&#xff0c;转换成一个隔板法组合数问题 // Problem: E. Good Triples // Contest: Codeforces - Codeforces Round 913 (Div. 3) // URL: https://codeforces…

xShell快捷键

Xshell 是一个强大的终端仿真器&#xff0c;它支持多种Linux发行版的远程连接。Xshell提供了一系列的快捷键&#xff0c;以提高用户的操作效率。以下是一些Xshell中常用的快捷键&#xff1a; 新建会话窗口&#xff1a; Ctrl N 或 Ctrl Shift N 在现有会话中打开新标签&…