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

Linux信号(Signal)基础

是一种系统内部的通知机制。

进程间通信,通过信号类别告诉执行哪个进程~

笼统概念:

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

具体概念:

信号源:具体哪个控件发出的信号

信号的类型:++单击、滑动、勾选勾选框及选择下拉框等++ ......

信号的处理方式具体根据注册函数实现~

槽(Slot)

槽就是信号的处理方式。

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

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

单击循环交互

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

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

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

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

cpp 复制代码
QPushButton* button = new QPushButton(this);//链接

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

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

handleClick定义

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

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

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

cpp 复制代码
//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();定义

运行:

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

先摆明结论:
cpp 复制代码
// 普通函数
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整体的重中之重。

感谢观看,莫辜负

ᕦ(・ㅂ・)ᕤ

相关推荐
不简说2 分钟前
JS 代码技巧 vol.1 — 10 个让代码少写 30% 的小套路
前端·javascript·面试
AOwhisky4 分钟前
Python 学习笔记(第六期)——函数:定义、参数传递与作用域
笔记·python·学习·云原生·运维开发·函数·参数传递
@@@@@@@@545 分钟前
JavaScript 的缺点与 TypeScript 的弥补
开发语言·javascript·typescript
网小鱼的学习笔记6 分钟前
Agent学习001
学习·迁移学习
Hilaku7 分钟前
为什么业务型前端容易遭遇中年危机?
前端·javascript·程序员
神仙别闹8 分钟前
编写基于C++ Huffman 算法的无损压缩程序和解压程序
java·c++·算法
এ慕ོ冬℘゜15 分钟前
深度解析 JavaScript:赋予 Web 灵魂的“全栈语言”
开发语言·前端·javascript
炸膛坦客17 分钟前
单片机/C/C++八股:(二十三)#define 和 typedef 的区别
c语言·c++·单片机
iCOD3R17 分钟前
Skill - 3秒生成精美GitHub主页
前端·程序员·ai编程
爱勇宝24 分钟前
《道德经》第5章:生产环境不相信眼泪
前端·后端·架构