将重载指针传递给成员函数信号作为QObject :: connect的参数

时间:2018-06-12 06:45:07

标签: c++ qt c++11 c++14

在Qt中,如果信号没有过载,可以将其传递给这样的连接方法。

QObject::connect(comboBox, &QComboBox::currentTextChanged, [&]()-> void {});

但如果信号过载,则可以分两步完成。

实施例

在Qt的QComboBox类中,突出显示的方法被重载

void QComboBox::highlighted(int index)
void QComboBox::highlighted(const QString & text)

当使用QObject :: connect时,我们可以声明指向成员函数变量的指针,然后使用它需要2个步骤。

       void (QComboBox::*fptr) (int) = &QComboBox::highlighted;
            QObject::connect(comboBox, fptr, [&]()-> void {
                                 insertWidgetToMapAndSend(listView);
                             });

是否可以在没有声明 ftptr 的情况下传递重载方法?

1 个答案:

答案 0 :(得分:5)

您可以投射内联:

QObject::connect(comboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::highlighted), [&]()-> void {
                             insertWidgetToMapAndSend(listView);
                         });

但是从Qt 5.7开始,使用qOverload

QObject::connect(comboBox, qOverload<int>(&QComboBox::highlighted), [&]()-> void {
                             insertWidgetToMapAndSend(listView);
                         });
前C ++ 14中的

QOverload

QObject::connect(comboBox, QOverload<int>::of(&QComboBox::highlighted), [&]()-> void {
                             insertWidgetToMapAndSend(listView);
                         });