QT基础【5-信号与槽】

简介: QT基础【5-信号与槽】



1 Qt槽函数的写法

1.1 Qt4的写法(不推荐)

connect(ui->element_name, SlGNAL(clicked), this, slot(function()));

1.2 Qt5的写法

connect(ui.element_name,&QPushButton::clicked, this,&Widget::func_name);

推荐使用这种写法,信号名字、槽函数名字写错了,编译器会直接报错

参数解释:

第一个参数:信号的发出者

第二个参数:发出的信号

第三个参数:信号的接受者

第四个参数:处理的槽函数

1.3 示例

#include "widget.h"
#include "ui_widget.h"
#include<QMessageBox>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(btn_click())); //QT4的写法;
    connect(this->ui->pushButton,&QPushButton::clicked,this,&Widget::btn_click); //Qt5的写法;
    //解释:将按钮点击事件绑定到名为pushButton的ui控件上,当该控件发生点击事件时,会运行btn_click函数。
}
Widget::~Widget()
{
    delete ui;
}
void Widget::btn_click(){
    QMessageBox::information(this,"title","push");
}

效果:

2 C++模板技术实现Qt信号槽机制

2.1 概述

信号槽机制不只在Qt中才可以实现,一般的C++项目也可以使用信号槽

信号的好处:例如类B要使用类A,则B就必须包含A,假如项目较大,文件较多,就很容易出错。而使用信号之后,就可以完成解耦。

与Qt中的信号一样,sigslot的槽函数返回值为void(因为槽函数只是用来响应信号的,通常不关心它的返回值是什么)

另外,槽函数和信号的参数列表也必须是一致的

2.2 代码

首先新建一个C++空项目,并添加sigslot.h头文件和sigslot.cc源文件。文件我都会放在百度网盘中,以供下载。

window中定义了2个信号,handle_signal中定义了两个槽函数,main函数中绑定信号和槽函数,并发送信号。

#include "sigslot.h"
#include<iostream>
using namespace std;
class window { //发送信号的类
public:
  //定义一些信号
  sigslot::signal0<>sig_button_click;
  sigslot::signal1<int>sig_print;
  //在sibgslot中,signal0表示不带任何参数的信号,signal1表示带一个参数的信号
};
class handle_signal :public sigslot::has_slots<> { //处理信号的类
public:
  void handle_button_click_sig() {
    cout << "按钮点击信号被调用" << endl;
  }
  void handle_print_sig(int val1) {
    cout << "打印信号被发送,值为:" << val1 << endl;
  }
};
int main() {
  window w;
  handle_signal handle;
  w.sig_button_click.connect(&handle, &handle_signal::handle_button_click_sig);
  w.sig_print.connect(&handle, &handle_signal::handle_print_sig);
  w.sig_button_click.emit(); //发送信号
  w.sig_print.emit(100); //发送信号
  return 0;
}

2.3 下载链接

百度网盘链接:提取码:ikun

参考:c++之sigslot库 - mohist - 博客园 (cnblogs.com)

3 总结

在代码的舞台上翩翩起舞, Qt,如诗如画,编织梦的彩虹。

跨越平台的轻盈舞姿, 文档的琴音,灵感的涟漪。

模块的花瓣,细腻而丰满, 开发者的心灵,在那里盛开。

清新而深邃,如林中明月, Qt,用优雅的笔触,谱写未来的篇章。

渴望挑战Qt的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多Qt的奇迹吧。我们推出了引领趋势的💻QT专栏:《QT从基础到进阶》 ,旨在深度探索Qt的实际应用和创新。🌐🔍

相关文章
|
1月前
|
编译器
(9)Qt中信号与槽重载的解决方案
本文介绍了在Qt中处理信号与槽重载问题的三种解决方案:使用函数指针、Qt提供的QOverload类和Qt4的宏方式。
102 3
|
6月前
|
存储 安全 编译器
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
1961 4
|
6月前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
82 0
|
6月前
|
编译器 C++ 开发者
QT基础【7-跨进程发送信号】
QT基础【7-跨进程发送信号】
|
6月前
|
存储 API C++
【Qt 信号槽】深入探索 Qt 信号和槽机制中的引用传递“ (“A Deep Dive into Reference Passing in Qt Signal and Slot Mechanism“)
【Qt 信号槽】深入探索 Qt 信号和槽机制中的引用传递“ (“A Deep Dive into Reference Passing in Qt Signal and Slot Mechanism“)
533 0
|
6月前
|
安全 编译器 开发者
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
209 0
|
1月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
70 3
(8)Qt中的自定义信号
|
17天前
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
28 1
003 Qt_信号和槽-上
|
5月前
|
安全 C++ Windows
Qt信号与槽机制
Qt信号与槽机制
52 1
|
3月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)

推荐镜像

更多