🌈个人主页:godspeed_lucip
🔥 系列专栏:QT从基础到进阶
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的实际应用和创新。🌐🔍
文章来源:https://www.toymoban.com/news/detail-832962.html
文章来源地址https://www.toymoban.com/news/detail-832962.html
到了这里,关于QT基础【5-信号与槽】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!