Qt5,信号槽关联错误

一、错误提示

error: C2664: “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 2 从“overloaded-function”转换为“const char *”

二、错误原因

1、Qt5的connect添加了编译器类型检查,如果遇到匹配失败的,或者找不到信号/槽的地方,会直接报错,而不是qt4到运行期才告诉用户。

2、使用函数指针能够获得编译期的类型检查,而这样也有弊端,当遇到重载信号槽的时候在编译器就会报错。

三、解决办法

1、使用C++的静态类型转换。

QButtonGroup *btn = new QButtonGroup(this);
// 绑定信号槽
connect(btn, static_cast<void (QButtonGroup:: *)(int)>(&QButtonGroup::buttonPressed),this, &PanelWidget::btnPressed);

2、手动声明一个函数指针,只想目标的信号/槽方法。

void (ClassA:: *p)(QString, QDate) = &ClassA::signalFunciton;
connect(&a, p, &b,    &Reader::slotFunction);

或者

connect(&a,(void (ClassA:: *)(QString, ))&ClassA::signalFunciton, b,    &ClassB::slotFunction);
发布了34 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Sparrow_du/article/details/103203248