news 2026/5/14 1:32:03

qt内详解信号和槽的基本概念+实例演示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt内详解信号和槽的基本概念+实例演示

Linux信号(Signal)基础

是一种系统内部的通知机制。
进程间通信,通过信号类别告诉执行哪个进程~

笼统概念:

信号源:发出信号的对象是谁
信号的类型:那种类别的信号
信号的处理方式:注册信号处理函数,实现特定功能,信号被触发的时候自动调用执行

具体概念:

信号源:具体哪个控件发出的信号
信号的类型:单击、滑动、勾选勾选框及选择下拉框等……
信号的处理方式具体根据注册函数实现~

槽(Slot)

槽就是信号的处理方式。

槽 —— "功能函数" 。 // 可很形象地理解为“槽盛纳信号”,槽运输着信号到特定的地方(栈帧),发挥工作。

connect(发送者对象, &发送者所处的类::信号类型, 接收者, &接收者::槽);

单击循环交互

点击就实现hello world!与world hello!!按钮文本的不断交互:

setText();设置文本
text();返回文本内容

前言:极大体现了框架能力,于不同.cpp与.h和main.c文件的配合。

widget.cpp内构建QPushButton对象button,由上文得知需要连接this。

QPushButton* button = new QPushButton(this);//链接

☆☆☆Ⅱbutton对象的文本设置与connect处理点击操作

button->setText("hello world!"); connect(button, &QPushButton::clicked, this, &Widget::handleClick); // 发送者 信号所属的类 单击信号 接受者 定义在Widget类内的 // QPushButton* 槽函数指针 槽函数指针 // 类型

handleClick定义

我们发现假若button定义在构造函数内那我们无法在handleClick函数内调用。

思路一:采用函数传参的方式传递参数button,但是我们发现若传递参数会出现在connect函数内无法为其提供正确格式的参数的结果(会转为函数调用目的是传递函数指针)。 因此思路一舍弃

思路二:将button转为成员变量。函数定义在类内,均可访问类内成员,思路合理。

//Widget.cpp Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) , _button(new QPushButton(this))//变成员变量相关 { ui->setupUi(this); //因为成员变量的引入 无需创建 QPushButton* button = new QPushButton(this);//链接 _button->setText("hello world!"); connect(_button, &QPushButton::clicked, this, &Widget::handleClick); //为解决button的传递问题变成成员变量 }

void Widget::handleClick();定义

运行:

使用函数指针时为什么要加"&"?

先摆明结论:
// 普通函数 void normalFunction() { } void test() { auto ptr1 = normalFunction; // ✅ 可以省略 &(函数名自动转换为指针) auto ptr2 = &normalFunction; // ✅ 显式加 & 也可以 } // 成员函数 class MyClass { public: void memberFunction() { } }; void test() { // ❌ 错误!成员函数名不能隐式转换为指针 auto ptr = MyClass::memberFunction; // 编译错误 // ✅ 必须使用 & 显式取地址 auto ptr = &MyClass::memberFunction; // 正确 }
C++规定:
  • 普通函数:函数名可以隐式类型转换为函数指针。
  • 成员函数:函数名不能隐式类型转换为成员函数指针,必须显示使用&

原因:成员函数需要绑定到this指针,类型比普通函数更复杂。

信号和槽是qt中的基础链接关系它实现了从用户到界面GUI的交互,是qt学习中的里程碑相应技术,更是qt整体的重中之重。

感谢观看,莫辜负
ᕦ(・ㅂ・)ᕤ

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 1:31:04

工作手机哪家好?企业选择工作手机系统要看这5个核心能力

很多企业在搜索“工作手机哪家好”“工作手机有哪些功能”“工作手机头部推荐”时,真正关心的不是单纯买一部办公手机,而是想解决客户资源分散、销售过程不透明、员工离职带走客户、客户跟进难管理、业务数据不安全等问题。方块K工作手机,是一…

作者头像 李华
网站建设 2026/5/14 1:26:52

在 Ubuntu 上使用 Python 脚本通过 Taotoken 批量处理文本并分析费用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Ubuntu 上使用 Python 脚本通过 Taotoken 批量处理文本并分析费用 当你在 Ubuntu 服务器上处理大量文本数据时,例如…

作者头像 李华
网站建设 2026/5/14 1:24:12

Arm调试寄存器架构详解与应用实践

1. Arm调试寄存器架构概述在Armv8/v9处理器架构中,调试寄存器是实现硬件级调试功能的核心组件。这些寄存器通过外部调试接口(External Debug Interface)为开发人员提供了对处理器内部状态的访问和控制能力。调试寄存器主要分为两类&#xff1…

作者头像 李华
网站建设 2026/5/14 1:21:30

Libevent实战:高性能网络编程指南

引言在前面的文章中,我们分别学习了 select、poll 和 epoll 三种 I/O 多路复用机制。虽然 epoll 性能卓越,但直接使用这些系统调用编写服务器存在以下痛点:代码冗长:每次都要手动管理描述符集合、事件注册、循环检测跨平台困难&am…

作者头像 李华
网站建设 2026/5/14 1:20:06

华为交换机CE6855-HI系列交换机固件升级

适用设备**:CE6855-HI系列交换机是这次固件升级的目标设备,这是对特定型号的交换机进行固件更新,说明了升级固件对硬件平台的特定依赖性

作者头像 李华