1 问题概述
在项目中使用QComboBox控件,需要在控件下拉选项发生变化时触发对应事件currentIndexChanged,出现问题为“无法确定需要哪个重载函数 QComboBox::currentIndexChanged"。
查询QComboBox库函数,有两个currentIndexChanged函数,
函数分别为:
void currentIndexChanged(int index);
void currentIndexChanged(const QString&)
2 解决方案
在进行信号关联时按需要关联的信号函数类型强制转换一下,具体操作函数如下:
connect(ui.comboBox_shixu_worktype, (void(QComboboX::*)(int))&QComboBox::currentIndexChanged, this, (void(TimeSeq_PLC_Controller::*)(int))&TimeSeq_PLC_Controller::onSXWorktypeChanged);
connect(ui.comboBox_shixu_worktype, (void(QComboBox::*)(int))&QComboBox::currentIndexChanged, this, (void(TimeSeq_PLC_Controller::*)(int))&TimeSeq_PLC_Controller::onSXWorktypeChanged);
其中,(void (QComboBox::*)(int)) 表示为 void QComboBox::currentIndexChanged(int index)函数对应的类型。
如果需要关联的信号函数为 void QComboBox::currentIndexChanged(const QString&)则对应强转类型表达为(void (QComboBox::*)(const QString&))。
3 总结
当关联的函数具有多态时,即函数名相同、函数参数不同时,可通过强制类型转换实现对应函数关联。