当前位置:网站首页>Qt 中重载信号槽的连接
Qt 中重载信号槽的连接
2022-08-05 18:47:00 【litanyuan】
背景
①.概述
继承自 QObject 的对象若其信号或者槽函数存在重载,不可以直接进行信号槽的连接。
②.代码示例
class demoClass : public QObject
{
Q_OBJECT
public:
demoClass(QObject *parent);
~demoClass();
signals:
void demoSignal(int val);
void demoSignal(const QString & str);
};
connect 函数不会自动选择需要的重载版本:
demoClass * demo = new demoClass(this);
connect(demo, &demoClass::demoSignal, [](int var) {
});

重载信号槽的连接
①.类型转换
使用 static_cast 强制转换成需要的类型:
demoClass * demo = new demoClass(this);
auto isok = connect(demo, static_cast<void (demoClass::*)(int var)>(&demoClass::demoSignal), [](int var) {
});
qDebug() << "connected " << isok;

②.成员函数指针
通过定义成员函数指针的方式进行连接:
demoClass * demo = new demoClass(this);
void (demoClass::*demoSignal)(int var) = &demoClass::demoSignal;
auto isok = connect(demo, demoSignal, [](int var) {
});
qDebug() << "connected " << isok;

③.QOverload
通过使用 QOverload 类确定需要的重载函数版本:
demoClass * demo = new demoClass(this);
auto isok = connect(demo, QOverload<int>::of(&demoClass::demoSignal), [](int var) {
});
qDebug() << "connected " << isok;

④.Qt4 方式
也可以采用 Qt4 中信号槽连接方式:
demoClass * demo = new demoClass(this);
auto isok = connect(demo, SIGNAL(demoSignal(int)), this, SLOT(demoSlot(int)));
qDebug() << "connected " << isok;


边栏推荐
猜你喜欢
随机推荐
大型数据中心云平台建设中网络的知识及实践
什么是事务?
认真思考生活
文盘Rust -- 配置文件解析
金仓数据库KingbaseES客户端编程接口指南-DCI(2. 概述)
2022CISCN华东北复现
Docker安装Mysql5.7
有关Spark产生Jar冲突的杂谈
var let const
2022NepCTF部分WP
领域驱动设计系列关键概念
对话窗口、面板滚动视图、标签切换视图;QDialog、QScroollArea、
BUUCTF-MISC(1)
Golang 汇编asm语言基础学习
防火墙的目标地址转换和源地址转换
使用 Monaco Editor 开发 SQL 编辑器
LVS load balancing cluster
EfficientFormer study notes
想去银行测试?那这套题目你必须要会
在过道里阅读









