Qt #define“发出信号”与GStreamer(gst)的冲突

时间:2014-12-17 10:21:29

标签: c++ qt gstreamer qtcore qt-signals

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不能很好地合作。或者有没有办法解决这个问题?

注意:如果我不#define signals signals,Qt可以说服#define Q_MOC_RUN。但这会导致使用

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

正如您现在可能已经猜到的那样,我正在尝试从不在身边的人那里接过代码并且谷歌不是我的朋友: - (


[更新]谢谢,@ IpApp的提示(这是行不通的,唉)。

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

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

我不允许改变subsytsem代码,只是为了模拟它的接口,但我不愿意嘲笑所有的Qt&amp;格里布,因为努力。

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

2 个答案:

答案 0 :(得分:3)

只需关注qmake项目文件中的this documentation

CONFIG += no_keywords

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

QT_NO_KEYWORDS

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

答案 1 :(得分:0)

我找到了另一个解决方案,对我来说更方便和简单 - 你应该在Qt标头之前包含glib标头,这就是全部。正如之前的glib代码一样,它不受Qt define语句的影响。