c++ - Qt 5.9 插槽命名错误

标签 c++ qt qt-slot

我正在使用 Qt 5.9。

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

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

最佳答案

使用名称on_stop_treatment 声明您的插槽将与称为Signal/Slot Automatic Connections 的Qt 功能发生冲突。

Qt 将为您的插槽检测此特定语法,并尝试将 stop 与名为 stop 的 QObject 和 treatment 与信号相匹配在 QObject 的类中声明的那个名称。

为了实现这一点,Qt 在内部使用 QMetaObject::connectSlotsByName(this); 来执行自动信号/槽连接。

关于c++ - Qt 5.9 插槽命名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46644024/

相关文章:

C++ - Visual Studio 中的命令提示符窗口

c++ - 请求或 AccessManager QT

python - 作为本地实例化类的方法的插槽永远不会被调用

c++ - Qt Pushbutton 必须在延迟后处理信号

c++ - 使用 OpenSSL 的 SCTP 上的 DTLS

c++ - 在构造函数声明中是什么意思

c++ - 命名空间、 header 和对象的层次结构

c++ - 如何在 C++ 和 Qt 中使用运行时加载的库

c++ - 覆盖 QAbstractItemModel::index 并访问 std::map

c++ - Qt 信号/槽和 C++ Lambda 表达式