【问题标题】:Passing overloaded pointer to member function signal as an argument to QObject::connect [duplicate]将指向成员函数信号的重载指针作为参数传递给 QObject::connect [重复]
【发布时间】:2018-11-21 11:24:27
【问题描述】:

在 Qt 中,如果信号没有重载,则可以像这样将其传递给 connect 方法。

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 的情况下传递重载方法?

【问题讨论】:

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


    【解决方案1】:

    你可以内联:

    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);
                             });
    

    【讨论】:

    • 这是正确的做法,确实qOverloadQOverloadstatic_cast 更受欢迎:它们不那么冗长。
    猜你喜欢
    • 2019-04-22
    • 2016-02-20
    • 1970-01-01
    • 2013-08-11
    • 2012-07-22
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多