Qt5中connect使用重载的信号函数

Qt5中的信号槽连接一般这样使用:

1
2
3
4
5
6
7
//mainwindow.h
public slots:
void ValueChange(int value);
//mainwindow.cpp
auto spinbox = new QSpinBox;
connect(spinbox, &QSpinBox::valueChange, this, &mainwindow::ValueChange);

但是,对于信号函数有重载的话,程序将无法编译通过,原因就是编译器无法确定是使用哪个信号函数,所以,我们需要显式的声明我们使用的信号函数类型

  • 使用static_cast

    1
    connect(spinbox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChange), this, &mainwindow::ValueChange);
  • c++14中使用qOverload
    qOverload需要在Qt5.7后的版本才可以使用,并且需要c++14

    1
    connect(spinbox, qOverload<int>(&QSpinBox::valueChange), this, &mainwindow::ValueChange);
  • c++11中使用QOverload
    在c++11则可以这么写

    1
    connect(spinbox, QOverload<int>::of(&QSpinBox::valueChange), this, &mainwindow::ValueChange);