【问题标题】:Using boost in Qt is throwing error regarding signals being defined as protected在 Qt 中使用 boost 会引发关于信号被定义为受保护的错误
【发布时间】:2013-04-04 12:15:07
【问题描述】:

我正在尝试使用 c++ 制作协议栈 DLL。我实际使用协议栈的 Gui 部分是 用Qt写的。但是我的协议栈是单独使用标准 c++ 编写的。我想拥有我的 协议栈以异步方式向 GUI 部分发送数据接收信号。为此,我想到了 具有信号和槽机制。我不想使用 Qt 信号和插槽,因为我认为它会 强迫我将我的协议栈 DLL 设为 Qt DLL。所以,我想到了使用升压信号。 但在 Qt 中,它们将 #defining 信号定义为:

#define signals protected

这会将所有升压信号替换为受保护的,我的程序会引发很多错误。 有没有办法单独在Boost库中避免这种#defining? 我不希望它在 Qt 库中停止。

【问题讨论】:

  • 只有当您的项目引用 QtCore 时才会发生这种情况。您的协议栈 DLL 项目是否包含 QT 内容?摆脱它们以继续前进。
  • 这个topic 可能会有所帮助
  • @Arun 协议栈没有使用 Qt 的东西。但我的 Gui 部分使用它。为了将 Gui 与协议层连接起来,我需要在两者中都有 Boost。这在 Gui 部分产生了问题。但现在它得到了解决。我只需要使用 Boost::signals2 而不是 Boost::signals。
  • @sajas,Gr8。感谢分享解决方案:)

标签: c++ qt boost signals


【解决方案1】:

你可以加"CONFIG += no_keywords # so Qt won't #define any non-all-caps `keywords'"

您也可以像这样取消定义符号:

    #undef signals

并添加你自己的

    #define SIGNALS protected 

如果你愿意。如果迁移到 Qt 5,请将 protected 更改为 public。

【讨论】:

  • 感谢您的信息。但这会禁用所有 Qt 内容中的#define,不是吗?如果 Qt 在内部使用名称“信号”而不是“保护”会怎样。以后不会出错吧。我能够改用 Boost::signals2 。再次感谢。获取配置详细信息并指出 undef 指令。
猜你喜欢
  • 1970-01-01
  • 2011-01-24
  • 2011-08-16
  • 2020-10-11
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多