当信号槽绑定的时候信号有重载-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)

 

 

posted @ 2025-11-25 10:16  家煜宝宝  阅读(10)  评论(0)    收藏  举报