簡體   English   中英

無法將QButtonGroup buttonClicked連接到仿函數

[英]Cannot connect QButtonGroup buttonClicked to a functor

我將QButtonGroup的信號連接到仿函數時遇到問題。

functionGroup = new QButtonGroup();
functionGroup->addButton( ui->pushButtonSetupExperiment, 0);
functionGroup->addButton( ui->pushButtonConfigure, 1);
functionGroup->addButton( ui->pushButtonModify, 2);
functionGroup->addButton( ui->pushButtonSearch, 3);
functionGroup->addButton( ui->pushButtonLogout, 4);

/* This works:
connect( ui->pushButtonSetupExperiment, &QPushButton::clicked, [=]() {
    emit finished(0);
});
*/

// This fails:
connect( functionGroup, &QButtonGroup::buttonClicked, [=](int id) {
    emit finished(id);
});

發生以下編譯器錯誤:

error: C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const' : Cannot convert argument 2 from 'overloaded-function' to 'const char *'...

無法弄清楚出了什么問題。 當然,我可以使用舊語法來完成任務,但我需要了解這里有什么問題。 謝謝你的幫助!

Qt版本:5.5.1
編譯器:msvc2012

問題是QButtonGroup::buttonClicked有兩個重載,它無法消除你的意思,因此它會產生編譯錯誤。 要解決此問題,您需要使用static_cast來指示要使用哪個buttonClicked變體。 不幸的是,語法有點笨拙:

connect(functionGroup, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), ...);

有關更多信息,請參閱@Devopia鏈接的Slot Connections文檔頁面之間的差異。 根據您的個人意見,您可能希望使用舊的基於字符串的連接語法(即值簡潔性和可讀性而不是類型安全性)。 或者您可以使用宏或using類型別名來嘗試簡化操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM