Qt 将静态参数添加到连接指令

Qt add statically parameters to connect directive

我的代码如下所示:

connect(c_name, SIGNAL(stateChanged(int) ), employeesList, SLOT(changeVisibility(int)));

其中 c_nameQCheckBox,我想将其 stateChange 连接到 employeesList 中属性的可见性,该方法如下所示:

void changeVisibility(int prop, int visibility){
        if(prop & EmployeeListElement::Name)
            updateVisibility(&EmployeeListElement::name, visibility);
        if(prop & EmployeeListElement::Surname)
            updateVisibility(&EmployeeListElement::surname, visibility);
        if(prop & EmployeeListElement::DateOfBirth)
            updateVisibility(&EmployeeListElement::date_of_birth, visibility);
        if(prop & EmployeeListElement::DateOfEmployment)
            updateVisibility(&EmployeeListElement::date_of_empl, visibility);

    }
private:
    void updateVisibility(QLabel* EmployeeListElement::* elem, int visibility){
        visibility ? (this->*elem)->show() : (this->*elem)->hide();
    }
...

如您所见,我需要传递第二个参数,即我所指的 属性,所以我想做这样的事情:

connect(c_name, SIGNAL(stateChanged(int) ), employeesList, SLOT(changeVisibility(int, Class::first_enum_property)));

那行不通,我的问题是,有什么办法可以做到吗?也许不使用 SIGNALSLOT 指令并使用一些(可能)lambda?

使用 lambda 确实可以解决您的问题:

connect(c_name, &QCheckBox::stateChanged, employeesList, [employeesList](int visibility){employeesList->changeVisibility(Class::first_enum_property, visibility);});

请注意,第三个参数(即 context object)是可选的,但在 employeesList 被销毁时用于自动销毁连接。

参考资料