Qt #define "signals" 与 GStreamer (gst) 冲突

问题描述 投票:0回答:3

Qt,它似乎用首字母

Q
来命名其他所有东西,这样做:
#define signals signals
qobjectdefs.h
.

然而,GStream,不是很自然,不会把

signals
想象成保留字,而是这样做

struct _GDBusInterfaceInfo
{
  /*< public >*/
  volatile gint         ref_count;
  gchar                *name;
  GDBusMethodInfo     **methods;
  GDBusSignalInfo     **signals;         <==================
  GDBusPropertyInfo   **properties;
  GDBusAnnotationInfo **annotations;
};

gdbusintrospection.h
.

我只是假设 Qt 和 GStreamer 不能一起玩。还是有办法解决这个问题?

注:Qt可以说服

#define signals signals
我不
#define Q_MOC_RUN
。但这会导致使用

的类出现问题
class
{
   public:
      // stuff
   signals:
      // stuff
   private:
      // stuff
};

你现在可能已经猜到了,我正试图从不支持它的人那里接管代码,而谷歌不是我的朋友:-(


[更新] 谢谢,@IpApp 从小费(这是行不通的,唉)。

我得到了别人的代码。显然它是为目标构建的,但从来没有为单元测试构建过,我必须这样做(我不知道他为什么要混合和匹配)。

当我在 Eclipse CDT 中使用 QT_NO_KEYWORDS 时,我得到错误,因为类定义代码不使用 Q_SINGAL(S) - 它使用信号宏(现在定义为信号)来定义某些公共成员。

不允许我更改子系统代码,只是为了模拟它的接口,但我不愿意模拟所有 Qt 和 Glib,因为这很费力。

也许有一种方法可以将库用于一个或另一个,而不是将它们的目录包含在源路径中?

c++ qt gstreamer qtcore qt-signals
3个回答
4
投票

只需在您的 qmake 项目文件中遵循此文档

CONFIG += no_keywords

如果您使用的不是 qmake,请确保在构建系统中定义以下内容:

QT_NO_KEYWORDS

然后,您需要确保在标头中的所有位置都使用了 Q_SIGNALSQ_SIGNAL,以便 moc(元对象编译器)仍然被告知它是一个信号。


2
投票

我找到了另一个对我来说更方便和简单的解决方案——你应该在 Qt 头文件之前包含 glib 头文件,仅此而已。正如之前的 glib 代码一样,它不受 Qt define 语句的影响。


0
投票

来自 QT 文档

  • 定义
    QT_NO_SIGNALS_SLOTS_KEYWORDS
  • slots
    替换为
    Q_SLOTS
    signals
    替换为
    Q_SIGNALS
© www.soinside.com 2019 - 2024. All rights reserved.