在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 的情况下传递重载方法?
答案 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);
});