当信号槽绑定的时候信号有重载-QOverload
当信号槽绑定的时候信号有重载
connect(ui.comboBox, QOverload<int>::of( & QComboBox::currentIndexChanged), this, &QtWidgetsApplication2::OnCurrentIndexChanged);
使用
QOverload指定绑定的槽函数的参数
源码分析:QOverload 的原理
template<typename... Args> struct QOverload { template<typename R, typename C> static constexpr auto of(R (C::*ptr)(Args...)) -> decltype(ptr) { return ptr; } };
举个例子:
QOverload<int>::of(&QSpinBox::valueChanged)
等价于:
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged)
只是 QOverload 更易读、更类型安全。
QOverload 的优势
| 优点 | 说明 |
|---|---|
| ✅ 简洁 | 避免使用冗长的 static_cast |
| ✅ 类型安全 | 编译期类型检查 |
| ✅ 可读性强 | 一眼看出是哪个重载版本 |
| ✅ 与 C++11 完美兼容 | 无需使用 SIGNAL/SLOT 宏 |
附录:常见重载信号的写法对照表
| 组件 | 信号 | QOverload 写法 |
| QSpinBox | valueChanged(int) | QOverload<int>::of(&QSpinBox::valueChanged) |
| QLineEdit | textChanged(const QString &) | QOverload<const QString &>::of(&QLineEdit::textChanged) |
| QComboBox | currentIndexChanged(int) | QOverload<int>::of(&QComboBox::currentIndexChanged) |
| QPushButton | clicked() | QOverload<>::of(&QPushButton::clicked) |

浙公网安备 33010602011771号