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
};

您可能已经猜到了,我正试图从一个不在身边支持它的人那里接管代码,而Google不是我的 friend :-(

[更新]谢谢,@ IpApp来自技巧(tip,这是行不通的)。

我得到了别人的密码。显然,它是针对目标构建的,但从未针对单元测试构建,因此我必须这样做(为什么不混搭,我不知道)。

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

我不允许更改subsytsem代码,只是为了模拟其接口(interface),但是由于这种努力,我不愿意模拟所有Qt&Glib。

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

最佳答案

只需在您的qmake项目文件中遵循this documentation即可:

CONFIG += no_keywords

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

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

关于c++ - Qt #define "signals"与GStreamer(GST)发生冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27523281/

10-11 04:23