QT_信号与槽, signal&slot

本文介绍了QT的信号与槽机制,包括官方基于函数指针和字符串实现的两种方式,强调了信号与槽的参数类型匹配检查。在运行时,可以检测到不匹配的错误。此外,文章详细讨论了自定义槽函数的注意事项,如使用&My_class::func的特殊形式,以及信号必须在头文件中声明且返回值为void等要点。
摘要由CSDN通过智能技术生成

官方介绍

the compiler can help us detect type mismatches when using the function pointer-based syntax. The string-based SIGNAL and SLOT syntax will detect type mismatches at runtime

(基于函数指针实现的) 信号与槽, 可以在 编译期间, 检测 (参数类型) 不匹配的错误
形如: &QObject::func

(基于字符串实现的) 信号与槽, 可以在 运行时期间, 检测 (参数类型) 不匹配的错误


emit signal_xx;
111;

比如, 有a b c共3个槽函数, 连接到了 signal_xx信号上;

Qt::ConnectionType::DirectConnection方式
当调用emit后, 会先执行槽函数; 等3个槽函数都执行完了, 才会执行111

Qt::ConnectionType::QueuedConnection方式
111会先执行, 然后是 (槽函数)


信号, 是通过 moc 实现的, 因此, 他必须写在 头文件里, (其实, 所有的QObject子类, 都必须在 .h头文件里)
不可以在 cpp里!!

信号的返回值, 必须是 void

----------------------

自定义槽函数

connect(btn, &QPushButton::clicked, this, &My_class::func);
一定要注意: &My_class::func, 这种写法, 非常特殊!!!
func为: void My_class::func(){ .. }

Overview

/*	connect(信号发送者,信号,信号接收者,槽函数)
1,信号signal:  发生了什么事情 (”已经“发生了)
2,槽函数shot:  处理这个信息,即当这个事情“已经”发生了,我们要对应的 如何处理这个信号  */

' 需求: 点击按钮, 然后关闭这个窗口
MyWidget::MyWidget(QWidget* fa) : QWidget(fa){
     '窗口的 构造函数
	QPushButton* btn = new QPushButton("close ", this); '该按钮,放到当前窗口里
	connect(btn , &QPushButton::clicked , this , &QWidget::close);
} '注意,信号和槽 是 clicked和close(不是函数,没有括号!!)
   '上面的QWidget::close,写成: MyWidget::close也可以。
   '虽然MyWidget里 没有close这个成员。 但因为“继承”, 他会往“父类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值