QT技巧系列(15) connect統一綁定信號的槽函數出現告警提示解決
QMetaObject::connectSlotsByName: No matching signal for。。。
界面上多個QCheckBox控件,統一綁定事件,代碼如下:
QList<QCheckBox *> cbBox = this->findChildren<QCheckBox *>();
for(int i=0; i < cbBox.count(); i++)
{
connect(cbBox.at(i),SIGNAL(clicked()),this,SLOT(on_cbbox_clicked()));
}
編譯的時候出現告警提示:
QMetaObject::connectSlotsByName: No matching signal for on_cbbox_clicked()
分析後找到原因如下:
on_cbbox_clicked()槽函數命名爲“on_[控件名稱]_clicked()”的格式,符合了利用控件自動綁定信號和槽的格式,系統自動會去找名爲cbbox的控件,所以會提示上面的告警信號。
解決辦法:
1、自定義的槽函數,不要命名爲“on_[控件名稱]_clicked()”的標準格式 ,槽函數修改定義爲:void oncbbox_cliked();
QList<QCheckBox *> cbBox = this->findChildren<QCheckBox *>();
for(int i=0; i < cbBox.count(); i++)
{
connect(cbBox.at(i),SIGNAL(clicked()),this,SLOT(oncbbox_cliked()));
}
這樣就不會有告警提示了。
2、修改某個控件的名字爲cbBox。
不過這種方法不太好,只是不會有告警提示。
備註:實戰示例,解疑答惑。
--不間端地思考,實時地批判你的工作!