2017-10-09 55 views
0

我正在使用Qt 5.9。Qt 5.9插槽命名错误

我在使用下划线样式声明插槽时遇到了问题,特别是当我用多于2个下划线命名插槽时。例如对于void on_stop_treatment()插槽,即使我没有建立连接,我也会得到QMetaObject::connectSlotsByName: No matching signal for on_stop_treatment()

无论如何,建立连接,即使我得到相同的消息,插槽信号机制的作品。删除第二个下划线我得到没有错误消息,并且该机制起作用。 (我也尝试删除MOC文件和重建)

+1

可能重复的[QMetaObject :: connectSlotsByName:没有匹配信号](https://stackoverflow.com/questions/24355023/qmetaobjectconnectslotsbyname-no-matching-signal) – eyllanesc

+0

这不是一个错误,moc连接一些创建的插槽通过Qt Designer使用方法[connectSlotsByName](http://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName),该方法将尝试连接格式为“on_ _ ”的任何插槽,并在你的情况你的插槽有这种格式,所以它正在寻找在您的类 – eyllanesc

+0

但我从你的答案理解,我应该得到QMetaObject :: connectSlotsByName:没有匹配的信号停止(),而不是QMetaObject :: connectSlotsByName:没有匹配信号on_stop_treatment() –

回答

3

声明你的插槽名为on_stop_treatment将称为Signal/Slot Automatic Connections

的Qt会检测到这一特定的语法为您的插槽Qt的功能发生冲突,并会尝试匹配stop用名为stoptreatment的QObject具有在QObject的类中声明的那个名称的信号。

为了达到这个目标,Qt内部使用QMetaObject::connectSlotsByName(this);来执行自动信号/插槽连接。

+0

此问题重复,无需回答。 – eyllanesc

+0

可能重复的[QMetaObject :: connectSlotsByName:没有匹配的信号](https://stackoverflow.com/questions/24355023/qmetaobjectconnectslotsbyname-no-matching-signal) – eyllanesc

+1

不,OP问为什么他得到这个错误时,这个。来自jhy的其他问题问为什么他的信号/插槽自动连接不能像他想要的那样工作。这里没有重复 – Antwane