【问题标题】:Do I need to use the Q_OBJECT macro if I only use slots?如果我只使用插槽,是否需要使用 Q_OBJECT 宏?
【发布时间】:2020-05-25 19:58:14
【问题描述】:

我有几个使用 QWebSocket 的类,似乎我可以调用 connect 来处理连接、关闭等的回调。我的调试器说一切正常。

如果我在我的类中使用 Q_OBJECT 宏,那么我必须在我的 cmake 中运行 MOC 编译器,当我试图从我的类中创建一个 lib 并在另一个应用程序中使用它时,这是一件很痛苦的事情,那将单独发一篇关于。

如果我删除 Q_OBJECT 宏,没有它,一切似乎都可以构建和运行。所以,问题是,如果我只是将 QWebSocket 的信号连接到插槽,我真的需要它吗?

一个相关的帖子是: Using Qt macro Q_OBJECT for slots 但是,这是为了解决由于不使用 MOC 编译器而导致的错误。我知道该怎么做,但我怀疑我是否首先需要 Q_OBJECT。

【问题讨论】:

  • 如果您在课堂上使用信号/插槽,则需要使用 Q_OBJECT。我加倍它确实可以在没有宏的情况下工作,除非你不使用信号连接。

标签: qt


【解决方案1】:

来自 Qt QObject class reference:

请注意,对于任何实现信号、槽或属性的对象,Q_OBJECT 宏都是必需的。

【讨论】:

  • 那为什么在使用插槽时没有它可以工作,但没有信号呢?此外,为什么我可以使用 lambda 作为 Qt5 中的连接插槽?似乎有一些争论forum.qt.io/topic/115188/…
  • 随意进入“未定义/不受支持”的世界!我不维护你的代码:)
猜你喜欢
  • 1970-01-01
  • 2012-08-08
  • 2011-12-29
  • 1970-01-01
  • 2017-10-03
  • 2021-08-12
  • 1970-01-01
  • 2018-12-27
  • 2018-11-24
相关资源
最近更新 更多