官方介绍
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这个成员。 但因为“继承”, 他会往“父类