connect統一綁定信號的槽函數告警提示解決(QT技巧系列15)

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。

         不過這種方法不太好,只是不會有告警提示。


備註:實戰示例,解疑答惑。

           --不間端地思考,實時地批判你的工作!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章