20221210 QT----信号和槽的使用

这篇具有很好参考价值的文章主要介绍了20221210 QT----信号和槽的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

信号和槽的使用

文章内容为B站 大轮明王讲Qt 的学习笔记

什么是信号(signal)

以QPushButton为例:
(1)按下按钮时,会触发一个mousePressEvent事件,此时会发出一个pressed信号;
(2)松开按钮时,会触发一个mouseReleaseEvent事件,此时会发出released和clicked信号。
事件的种类有很多,不同的事件都对应着不同的信号,当事件发生时,对应的信号就会发出,我个人把他理解成一个事件发生的标志。

什么时槽(slot)

槽,即为槽函数,它需要与信号进行绑定,也就是信号发出后,系统会去调用的一个函数。

信号和槽的绑定(connect)

通过上面的介绍我们知道,信号和槽是一一对应的,当信号产生后,会有一个槽函数去执行以响应该信号,因此这中间就需要有一个东西将二者连接起来,我们通常使用connect实现。

信号(signal)<------>connect<------>槽(slot)

connect的作用就是将二者绑定在一起,具体用法在下面介绍。

标准信号和槽的使用

以QPushButton为例,首先在UI界面中拖拽两个pushbutton,如图所示。
qt 按钮 槽,qt,ui,开发语言
双击按钮,即可修改按钮的文本显示内容,在右侧属性菜单栏中,可以修改对应按钮的ObjectName,这是我们在编程中需要用到的,这里我设置的是btn_wdmax和btn_wdmin。
接下来,我们可以在帮助文档中,查看QPushbutton都有具有哪些标准信号和槽,如下图所示。
qt 按钮 槽,qt,ui,开发语言
我们点击QAbstractButton,进入QPushButton的父类中找到其继承的信号。
qt 按钮 槽,qt,ui,开发语言
在QPushButton中可以找到其对应的Slots如下。
qt 按钮 槽,qt,ui,开发语言
接下来,我们在程序中简单使用信号和槽,实现相关功能,还是使用上篇文章中建立的工程,在mainwindow.cpp中进行编程。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)  //这里new了一个类,那么就需要在析构函数中删除这个类
{
    ui->setupUi(this);      //这里的this代表MainWindow,作为实参传递给setupUi函数

    //connect(发送信号的对象,发送的信号,接收信号的对象,接收信号后执行的函数方法)
    connect(ui->btn_wdmax,SIGNAL(clicked()),this,SLOT(showMaximized()));
    connect(ui->btn_wdmin,SIGNAL(clicked()),this,SLOT(showMinimized()));

}

执行上述程序,即可实现我们按钮所对应的功能,这就是标准信号和槽的简单应用。

自定义信号和槽的使用

自定义信号和槽的条件:

1.自定义的类,要继承自QObject
2.自定义的类,其中要声明一个宏Q_OBJECT

简单案例使用:
实现:长官(Commander)发送一个go信号,然后Soldier执行fight槽函数。

(1)创建Commander和Soldier类

qt 按钮 槽,qt,ui,开发语言
右击项目名称->添加新文件弹出图示界面,选择C++ Class。
qt 按钮 槽,qt,ui,开发语言
在这里输入类名Commander,并且Base Class中选择QObject,下一步即可,即可成功创建Commander类,同样的方法去创建Soldier类。

(2)创建自定义信号

qt 按钮 槽,qt,ui,开发语言

在commander.h中添加自定义信号,这里commander只发送信号,因此我们只在signals处创建信号,注意:信号无返回值,但其可以传递参数。

(3)创建自定义槽函数

qt 按钮 槽,qt,ui,开发语言

在soldier.h中添加槽函数,在public slots处添加槽函数,注意:槽函数的参数和返回值要和信号一一对应。

(4)自定义信号和槽的使用
//1.创建信号和槽的对象
Commander commander;
Soldier soldier;

//2.建立信号和槽的连接
connect(&commander,SIGNAL(go(QString)),&soldier,SLOT(fight(QString)));

//3.发送信号
commander.go("fight");

在主程序中输入如下代码,点击运行即可实现我们的功能,程序会输出字符串 fight

信号和槽的连接方式

(1)SIGNAL/SLOT
(2)函数地址
(3)UI设计师界面-转到槽
(4)UI设计师界面-信号槽编辑器
(5)lambda表达式

SIGNAL/SLOT

上面使用的就是这种方式

函数地址(推荐)
//2. 函数指针 编译时会检查函数名(推荐)
//connect(发送者,&信号类::信号,接受者,&槽函数类::槽函数)
connect(ui->btn2,&QPushButton::clicked,this,&QMainWindow::showNormal);
设计者界面-转到槽 (不推荐)
右键按钮,选择对应信号,生成对应的槽函数,此时无需connect在生成函数中写槽函数的逻辑
设计者界面-信号槽编辑器(不推荐)

不写了

lambda表达式

C++中lambda表达式复习文章来源地址https://www.toymoban.com/news/detail-552600.html

[capture](parameters)option->return-type{body}
capture:捕获列表,可选
捕获列表总是出现在lambda表达式的开始,实际上,[ ]是lambda引出符,编辑器根据该引出符判断接下来的代码是否是lambda表达式。
捕获列表能够捕捉上下文中的变量,例:
[ ]  // 不捕获任何变量
[ & ] //按引用捕获外部作用域中所有变量,在lambda表达式内使用
[ = ]	//按值捕获外部作用域中所有变量,在lambda表达式中使用,只读属性
[ = , &foo]	//捕获外部作用域中所有变量,其中foo变量按引用捕获,其他按值捕获
[ bar ]	//按值捕获bar变量,同事不捕获其他变量
[ this ]	//捕获当前类中的 this 指针,可以在lambda中使用当前类的成员变量和函数,如果已经使用了& 或者 = ,就默认添加此选项
parameters:参数列表,可选
option:函数选项,可选
return-type:返回值类型,可选。没有返回值时,可以省略 ->
body:函数体
lambda连接信号和槽
//5. lambda表达式
connect(ui->btn5,&QPushButton::clicked,this,[&](){
    this->setWindowTitle("[信号和槽连接的方式 之 lambda]");
});

到了这里,关于20221210 QT----信号和槽的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】信号和槽

     需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、Qt中的信号和槽 1、信号 2、槽 3、Q_OBJECT 二、Qt中的connect函数 三、自定义信号、自定义槽 1、自定义槽函数 1.1使

    2024年01月21日
    浏览(32)
  • 七、Qt 信号和槽

    在QT4以上的版本,在窗体上用可以通过选中控件,然后点击鼠标右键单击按钮,选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件(信号和槽)。 不同的控件,信号不全是一样的,根据控件的使用场

    2024年01月19日
    浏览(28)
  • 【QT】信号和槽(15)

    前面的内容说了很多不同的控件如何使用,今天来看下QT的核心, 信号与槽(Signals and slots) ! 简单理解一下,就是我们的信号与槽连接上了之后,发射一个信号给到槽,槽函数接收到了这个信号之后,槽函数会被调用。 1.python 3.7.8   可直接进入官网下载安装:Download Pyt

    2024年02月10日
    浏览(39)
  • QT之信号和槽

    一、什么是信号和槽? 我们经常看到的功能,点击一个按钮实现窗口关闭。 这一过程发生了什么?是怎么实现的 按钮相当于一个信号,点击相当于发送一个信号,窗口是个接收者,关闭窗口是个槽函数 信号:各种事件 槽:响应信号的动作 当一个按钮(信号)被触发(发送

    2024年02月07日
    浏览(24)
  • 【Qt】信号和槽机制

    目录 一、认识信号和槽 二、connect函数 三、自定义槽函数 四、自定义信号 五、带参数的信号和槽 六、信号和槽断开连接 七、信号和槽存在的意义 八、Lambda表达式定义槽函数 概述 在Qt中,用户和控件的每次交互过程称为一个事件。如\\\"用户点击按钮\\\"是一个事件,\\\"用户关闭窗

    2024年02月22日
    浏览(35)
  • Qt 信号和槽机制

    一. 简介         在Qt中使用信号和槽机制来完成对象之间的协同操作。简单来说,信号和槽都是函数,比如按下窗口上的一个按钮后想要弹出一个对话框,那么就可以将这个按钮的单击信号和我们定义的槽关联起来,在这个槽中可以创建一个对话框,并且显示它。这样,

    2024年01月18日
    浏览(30)
  • 07.QT信号和槽-2

            在Qt中,允许⾃定义信号的发送⽅以及接收⽅,即可以⾃定义信号函数和槽函数。但是对于⾃定义的信号函数和槽函数有⼀定的书写规范。 1.1 自定义信号 (1)⾃定义信号函数必须写到\\\"signals\\\"下; (2)返回值为void,只需要声明,不需要实现; (3)可以有参数,

    2024年04月14日
    浏览(26)
  • Qt6.2教程——3.Qt信号和槽

    信号和槽是Qt中一个强大的特性,用于处理对象之间的通信。它们是一种事件处理机制,允许一个对象在某个事件发生时通知另一个对象。 定义 : 信号是一个QObject的成员函数,当某个特定事件发生时,它被自动调用。它可以与一个或多个槽关联。 声明 : 在Qt类的声明中,信号

    2024年02月10日
    浏览(35)
  • QT中删除信号于槽的连接

    如果是在UI里建立的,那就在下面这个函数里删除连接槽函数的对应行 如果是代码建立的,就把connect();函数删除,记住,若槽函数是唯一的,那么到头文件中删除该槽函数,不然会出现连接错误。 右键转到槽 会自动进入槽函数   并且在头文件中自动生成私有槽的声明: 之

    2023年04月08日
    浏览(26)
  • 【Qt】信号槽的三种连接语法

    实现观察者模式,可以使用函数回调,但注册回调函数有一定局限,安全性也没有保证。所以一定程度上可以说 Qt 信号槽是对回调机制进行了封装。 Qt 的信号槽能够连接(connect) 和编译通过,需要满足两个条件 信号的参数个数大于等于槽函数 信号槽的参数个数相同的部分,

    2024年02月13日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包