【发布时间】:2017-10-09 10:14:08
【问题描述】:
我使用的是 Qt 5.9。
我在声明具有下划线样式的插槽时遇到问题,特别是当我使用超过 2 个下划线命名时。例如使用 void on_stop_treatment() 插槽,即使我没有建立连接,我也会得到 QMetaObject::connectSlotsByName: No matching signal for on_stop_treatment()。
无论如何,建立连接,即使我收到相同的消息,插槽信号机制也可以工作。删除第二个下划线我没有收到错误消息并且该机制有效。 (我也试过删除moc文件并重建)
【问题讨论】:
-
这不是错误,moc 连接由 Qt Designer 创建的一些插槽使用方法connectSlotsByName,此方法将尝试连接任何格式为
on_<object>_<signal>的插槽,在您的情况下您的插槽具有该格式,因此它正在您的班级中寻找 -
但是从你的回答中我明白我应该得到 QMetaObject::connectSlotsByName: No matching signal for stop() 而不是 QMetaObject::connectSlotsByName: No matching signal for on_stop_treatment()
-
不,它会尝试在假设的
stop对象上寻找假设的treatment信号