首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将QButtonGroup buttonClicked连接到函数器

无法将QButtonGroup buttonClicked连接到函数器
EN

Stack Overflow用户
提问于 2016-01-05 11:37:53
回答 1查看 1.1K关注 0票数 1

我在将QButtonGroup的信号连接到函数器时遇到了问题。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 14:28:52

问题是QButtonGroup::buttonClicked有两个重载,并且它不能辨别您所指的是哪一个,因此它会生成编译错误。要解决此问题,您需要使用static_cast来指明要使用的buttonClicked变体。不幸的是,语法有点笨拙:

代码语言:javascript
复制
connect(functionGroup, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), ...);

有关更多信息,请参阅@Devopia链接的to Differences between Slot Connections文档页面。根据您的个人观点,您可能希望使用旧的基于字符串的连接语法(例如,值的简洁性和可读性优于类型安全性)。或者,您可以使用宏或using类型别名来尝试简化操作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34603778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档