【Qt】信号和槽简介

ops/2025/2/4 22:31:47/

        信号与槽是 Qt编程的基础,也是 Qt的一大创新。有了信号与槽的编程机制,在 Qt 中处理界面上各个组件的交互操作就变得比较直观和简单。

        信号(signal)是在特定情况下被发射的通知,例如QPushButton较常见的信号就是点击鼠标时发射的 clicked()信号。GUI程序设计的主要工作就是对界面上各组件的信号进行响应,只需要
知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。

        槽(slot)是对信号进行响应的函数。槽就是函数,所以也称为槽函数。槽函数与一般的 C++
函数一样,可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与信号关联,当信号被发射时,关联的槽函数被自动运行。

        将信号和槽关联起来的函数时connect(),其声明如下:

connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);connect(const QObject *sender, const QMetaMethod &signal,const QObject *receiver,const QMetaMethod &method,Qt::ConnectionType type = Qt::AutoConnection);connect(const QObject *sender, const char *signal,const char *member,Qt::ConnectionType type = Qt::AutoConnection) const;

        sender是发射信号的对象的名称;signal是信号,信号可以看作特殊的函数,需要带有括号,有参数时还需要指明各参数类型;receiver是接收信号的对象的名称;slot()是槽函数,需要带有括号,有参数时还需要指明各参数类型。关于信号与槽的使用,有以下一些规则需要注意:

        1、一个信号可以连接多个槽函数。

        2、多个信号可以连接同一个槽函数。

        3、一个信号可以连接另一个信号。

        4、信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参如果参数不匹配,会出现编译错误或运行错误。

        5、在使用信号与槽的类中,必须在类的定义中插入宏Q_OBJECT。

        6、当一个信号被发射时,与其关联的槽函数通常被立即运行,就像正常调用函数一样。只有当信号关联的所有槽函数运行完毕后,才运行发射信号处后面的代码。

    QPushButton *button1 = new QPushButton(this);button1->setText("按钮");//button1->setParent(this);button1->move(0,0);button1->resize(200,100);connect(button1,&QPushButton::clicked,this,&QWidget::close);

上述代码就是信号和槽的简单实例


http://www.ppmy.cn/ops/155692.html

相关文章

图像处理之图像灰度化

目录 1 图像灰度化简介 2 图像灰度化处理方法 2.1 均值灰度化 2.2 经典灰度化 2.3 Photoshop灰度化 2.4 C语言代码实现 3 演示Demo 3.1 开发环境 3.2 功能介绍 3.3 下载地址 参考 1 图像灰度化简介 对于24位的RGB图像而言,每个像素用3字节表示&#xff0…

【数据库初阶】表的查询语句和聚合函数

🎉博主首页: 有趣的中国人 🎉专栏首页: 数据库初阶 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们,大家好!在这篇文章中,我们将深入浅出地为大家讲解 表的查…

视频拼接,拼接时长版本

目录 视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg imageio,适合视频较短 视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg import subprocess import glob import os from nats…

ubuntu18.04环境下,Zotero 中pdf translate划线后不翻译问题解决

问题: 如果使用fastgithub,在/etc/profile中设置全局代理,系统重启后会产生划线后不翻译的问题,包括所有翻译代理均不行。终端中取消fastgithub代理,也不行。 解决: 1)不在/etc/profile中设置…

GESP2023年9月认证C++六级( 第三部分编程题(1)小杨买饮料)

参考程序&#xff1a; #include <iostream> using namespace std;const int INF 1000000000; // 定义一个大的数&#xff0c;代表无解的状态int cost[2001]; // 用来存储每个容量所需的最小花费int main() {int N 0, L 0;cin >> N >> L; // 读入饮料种…

安卓pad仿写element-ui表单验证

安卓pad仿写element-ui表单验证 背景&#xff1a;仿写对象&#xff1a;showcase&#xff1a; 布局总览&#xff1a;核心代码总览&#xff1a;代码仓&#xff1a; 背景&#xff1a; 最近半年开始接触安卓开发&#xff0c;平时开发接触的点比较零碎&#xff0c;计划闲暇时做一些…

大数据数仓实战项目(离线数仓+实时数仓)2

1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 下面是阿里的一种分层方式 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast…

预防和应对DDoS的方法

DDoS发起者通过大量的网络流量来中断服务器、服务或网络的正常运行&#xff0c;通常由多个受感染的计算机或联网设备&#xff08;包括物联网设备&#xff09;发起。 换种通俗的说法&#xff0c;可以将其想象成高速公路上的一次突然的大规模交通堵塞&#xff0c;阻止了正常的通勤…