【Qt】信号和槽

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

【Qt】信号和槽,Qt,qt,开发语言


 需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


 目录

一、Qt中的信号和槽

1、信号

2、槽

3、Q_OBJECT

二、Qt中的connect函数

三、自定义信号、自定义槽

1、自定义槽函数

1.1使用代码创建控件的方式

1.2使用ui创建控件的方式

2、自定义信号

四、带参数的信号和槽

五、信号和槽断开连接

六、使用lambda表达式定义槽函数


一、Qt中的信号和槽

1、信号

信号源:由哪个控件产生的信号

信号的类型:用户对GUI界面的不同操作,就可能触发不同的信号(点击、移动光标、勾选、下拉等)

2、槽

信号的处理方式:槽 =>处理信号的回调函数

Qt使用connect这样的函数,把一个信号和一个槽关联起来。信号触发,自动回调信号处理函数。

3、Q_OBJECT

如果一个类要使用信号和槽,必须在类中添加Q_OBJECT这个宏

【Qt】信号和槽,Qt,qt,开发语言

二、Qt中的connect函数

connect是QObject(Qt中其他类的“祖先类”)提供的静态成员函数。

bool QObject::connect(const QObject *sender,
   const QMetaMethod &signal, 
   const QObject *receiver, 
   const QMetaMethod &method, Qt::ConnectionType type=Qt::AutoConnection);
  • const QObject *sender: 哪个控件?
  • const QMetaMethod &signal: 哪种信号?(必须是信号源自带或继承自父类的信号)
  • const QObject *receiver: 哪个对象负责处理?
  • const QMetaMethod &method: 用于处理信号的槽函数。(要处理信号的对象提供的成员函数)
  • Qt::ConnectionType type: 连接类型,它可以指定连接的类型,如自动连接、直接连接等。通常不需要手动设定。
  • 第一个和第二个参数,第三个和第四个参数类型要对上才行。

【Qt】信号和槽,Qt,qt,开发语言

[signal] void QAbstractButton::clicked(boolchecked = false)

This signal is emitted when the button is activated (i.e., pressed down then released while the mouse cursor is inside the button), when the shortcut key is typed, or when click() or animateClick() is called. Notably, this signal is not emitted if you call setDown(), setChecked() or toggle().

If the button is checkable, checked is true if the button is checked, or false if the button is unchecked.

See also pressed(), released(), and toggled().

【Qt】信号和槽,Qt,qt,开发语言

三、自定义信号、自定义槽

1、自定义槽函数

槽函数一般用于用户触发某个操作后,需要执行的业务逻辑。所以需要自定义槽函数。

1.1使用代码创建控件的方式

【Qt】信号和槽,Qt,qt,开发语言

1.2使用ui创建控件的方式

【Qt】信号和槽,Qt,qt,开发语言

【Qt】信号和槽,Qt,qt,开发语言

自动生成的槽函数的名字是on_pushButton_clicked,其中on是固定的,pushButton是ui中的objectName,clicked写明了是哪种信号。所以ui自动生成的槽函数不需要connect函数就能在触发信号时被回调。(ui_widget.h中调用了QMetaObject::connectSlotsByName,它会触发自动连接信号槽的规则)

2、自定义信号

自定义信号很少用到。因为在GUI中,用户的操作行为是可以穷举的,Qt内置的信号已经覆盖到了大部分可能的用户操作。

如果真的需要自定义信号:

1、信号是一种特殊的函数,程序员只需写出函数声明,并告诉Qt,这是一个信号即可。这个函数的定义,是Qt在编译过程中,自动生成的。(无法干预)

2、信号函数的返回值必须是void,有没有参数都可以,也支持函数重载。

3、信号可以使用emit关键字进行发射。(Qt5 emit不写也行)

【Qt】信号和槽,Qt,qt,开发语言

四、带参数的信号和槽

信号和槽也可以带参数。发射信号时,就可以给信号函数传递实参,这个参数就会被传递到对应的槽函数中。

信号和槽函数的参数类型必须一致,个数可以不一致,但是信号的参数个数必须大于槽函数的参数个数。

【Qt】信号和槽,Qt,qt,开发语言

一个信号通过connect关联多个槽函数,一个槽函数也能被多个信号关联。

五、信号和槽断开连接

使用disconnect断开信号槽的连接(主动断开往往是把信号重新绑定到另一个槽函数上)

【Qt】信号和槽,Qt,qt,开发语言

如果这里的代码没有disconnect,会使一个信号绑定两个槽函数,触发点击按钮,同时执行两个槽函数。

六、使用lambda表达式定义槽函数

注意被捕获变量的生命周期。

尽量传值捕获,传引用捕获可能会捕获到已经被释放的变量,造成段错误。例如:

【Qt】信号和槽,Qt,qt,开发语言

上图传值捕获没问题,传引用捕获会崩溃。原因是button是局部变量(它指向的空间位于堆区,但它自己是一个局部变量的指针),构造函数结束后button变量即被销毁,造成段错误。文章来源地址https://www.toymoban.com/news/detail-811641.html

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

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

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

相关文章

  • 【Qt】信号和槽机制

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

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

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

    2024年01月18日
    浏览(41)
  • Qt6.2教程——3.Qt信号和槽

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

    2024年02月10日
    浏览(52)
  • [Qt的学习日常]--信号和槽

    前言 作者 :小蜗牛向前冲 名言 :我可以接受失败,但我不能接受放弃   如果觉的博主的文章还不错的话,还请 点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习:什么是信号和槽,自定义槽函数和信号函数,信号和槽的传参,断开,

    2024年04月28日
    浏览(31)
  • 02 qt基本控件及信号和槽

    功能:显示一个字符串内容 主要接口函数 构造函数: 赋值运算符重载: 功能函数: 1)基本数据类型(int,float,double,char*)转换成字符串 number(long , int ) : QString number(int , int ) : QString number(uint , int ) : QString number(ulong , int ) : QString number(qlonglong , int ) : QString number(qulonglong , int

    2024年02月12日
    浏览(42)
  • qt信号和槽避免多次连接

    qt同一个信号和槽多次连接,则槽函数 会触发多次 (默认),可能不是我们想要的结果。 有3种方法可以解决这个问题: 因为初始化函数在在整个程序中只运行一次,所以这里面连接信号和槽,就能避免重复连接问题了。 Qt::UniqueConnection 的作用是:如果该信号以前没连接过

    2024年02月10日
    浏览(42)
  • 20221210 QT----信号和槽的使用

    什么是信号(signal) 以QPushButton为例: (1)按下按钮时,会触发一个mousePressEvent事件,此时会发出一个pressed信号; (2)松开按钮时,会触发一个mouseReleaseEvent事件,此时会发出released和clicked信号。 事件的种类有很多,不同的事件都对应着不同的信号,当事件发生时,对应

    2024年02月15日
    浏览(48)
  • Qt快速学习(一)--对象,信号和槽

    目录 1.Qt概述 1.1 什么是Qt 2.2 手动创建 2.3 pro文件 2.4 一个最简单的Qt应用程序        3 第一个Qt小程序 3.1 按钮的创建 3.2 对象模型(对象树)       3.3 Qt窗口坐标体系 4 信号和槽机制         4.1 系统自带的信号和槽 4.2 自定义信号和槽     4.3信号槽的拓展     

    2024年02月12日
    浏览(40)
  • QT基础之——ui文件以及信号和槽机制

            上一节我们讲了除界面文件ui文件其他的所有文件,这一节我们来介绍一下ui文件:在文件目录中我们能看到界面文件这一栏,点击展开我们可以看到一个以\\\".ui\\\"结尾的文件,双击我们会看到如下界面:         我们在右侧选中label和PushButton拖入到工作台上的窗口中,

    2024年04月08日
    浏览(66)
  • qt解决信号和槽连接时传递额外参数的问题

    QSignalMapper 是 Qt 框架中的一个类,用于解决信号和槽连接时传递额外参数的问题。当一个信号被触发时,QSignalMapper 可以将该信号与一个特定的参数关联起来,并将信号与对应的槽函数进行连接。 下面是关于 QSignalMapper 的一些详细解释: 1.作用: QSignalMapper 类的主要作用是在一

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包