Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将QButtonGroup按钮链接到函子_C++_Qt_Qt5 - Fatal编程技术网

C++ 无法将QButtonGroup按钮链接到函子

C++ 无法将QButtonGroup按钮链接到函子,c++,qt,qt5,C++,Qt,Qt5,我无法将QButtonGroup的信号连接到函子 functionGroup = new QButtonGroup(); functionGroup->addButton( ui->pushButtonSetupExperiment, 0); functionGroup->addButton( ui->pushButtonConfigure, 1); functionGroup->addButton( ui->pushButtonModify, 2); fun

我无法将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);
});
出现以下编译器错误:

错误:C2664:'QMetaObject::Connection QObject::connect(const QObject*,const char*,const char*,Qt::ConnectionType)const':无法将参数2从“重载函数”转换为“const char*”…

不知道怎么了。当然,我可以使用旧语法来完成任务,但我需要了解这里的错误。谢谢你帮助我

Qt版本:5.5.1

编译器:msvc2012

问题是
QButtonGroup::buttonClicked
有两个重载,它无法区分您指的是哪一个,因此会生成编译错误。要解决这个问题,您需要使用
static\u cast
来指示要使用哪个
按钮的变体。不幸的是,语法有点笨拙:

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

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

问题是
QButtonGroup::buttonClicked
有两个重载,它无法消除您指的是哪一个,因此会生成编译错误。要解决这个问题,您需要使用
static\u cast
来指示要使用哪个
按钮的变体。不幸的是,语法有点笨拙:

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

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

重载信号或插槽是明确的,使用基于字符串的语法。。。阅读这里了解更多信息:我忽略了最后一部分!谢谢重载信号或插槽是明确的,使用基于字符串的语法。。。阅读这里了解更多信息:我忽略了最后一部分!谢谢