Qt5 信号重载
2024-10-16 05:46:25
下面以最常用的QComboBox为例说明。
【1】Qt4风格的connect
示例代码:
connect(ui->comboBox, SIGNAL(activated(int index)), this, SLOT(onActivated(int nIndex)));
观察Qt4风格,可知第二个参数即使信号重载,也不会出现歧义。
【2】Qt5风格的connect
示例代码:
connect(ui->comboBox, &QComboBox::activated, this, &MyWidget::onActivated);
但是,针对QComboBox对象,这样的信号槽连接,编译器会报编译错误:
// error: C2664: “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”:
// 无法将参数 2 从“overloaded-function”转换为“const char *”上下文不允许消除重载函数的歧义
经查询分析,原因如下:
Q_SIGNALS:
void editTextChanged(const QString &);
void activated(int index);
void activated(const QString &);
void highlighted(int index);
void highlighted(const QString &);
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
void currentTextChanged(const QString &);
可知,因QComboBox的activated信号有重载实现导致。
【3】Qt5风格信号重载的connect方式
示例代码:
// 两种正确方式:
// 方式1:
typedef void (QComboBox::*QComboIntSignal)(int);
connect(ui->comboBox, static_cast<QComboIntSignal>(&QComboBox::activated), this, &MyWidget::onActivated); // 方式2:
connect(ui->comboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &MyWidget::onActivated);
Qt助手范例:
Good Good Study, Day Day Up.
顺序 选择 循环 总结
最新文章
- Redis简单案例(二) 网站最近的访问用户
- 面向对象Part1对象的创建和Static!
- 学UNITY的基础
- Mybatis传多个参数(三种解决方案)
- TCL:表格(xls)中写入数据
- [Java 进阶]异常
- UIButton(改变Title和image位置)
- Jquery Mobile中pageinit等函数执行两次的问题【终极解决】
- svnUbuntu下安装与使用(ZT)
- OpenReports操作指南
- IE CSS Bug 系列
- C#开发学习——SqlHelper的应用
- 初码-Azure系列-文章目录
- ASP.NET 给Web中的网页添加Loading进度条形式
- CentOS7离线安装mysql5.7
- js三种弹出框的用法
- 云栖大会day1 上午
- Gis数据处理2 ---8.18
- L2-013. 红色警报(并查集)*
- C#读取Excel表格的数据