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的实际应用和创新。🌐🔍