【问题标题】:Qt #define "signals" clashes with GStreamer (gst)Qt #define "signals" 与 GStreamer (gst) 发生冲突
【发布时间】:2014-12-17 10:21:29
【问题描述】:

Qt,它似乎用首字母 Q 命名其他所有东西,这样做:#define signals signals in 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 Q_MOC_RUN,Qt 可以被说服#define signals signals。但这会导致使用

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

正如您现在可能已经猜到的那样,我正在尝试从不在身边的人那里接管代码以支持它,而 Google 不是我的朋友:-(


[更新]谢谢,@IpApp 来回提示(这不起作用,唉)。

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

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

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

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

【问题讨论】:

  • “也许有一种方法可以将库用于其中一个,而不是将它们的目录包含在源路径中?”嗯,是的,你应该始终确保每个编译目标只给出它实际需要的库路径......或者这不是你要问的?

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


【解决方案1】:

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

CONFIG += no_keywords

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

QT_NO_KEYWORDS

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

【讨论】:

  • 注意:为什么直接使用 gstreamer 而不是 QtMultimedia 是另一个问题。
  • @Mawg: 你能在包含gdbusintrospection.h 之前做#undef signals 还是那也有问题?
  • @Mawg:另外,您打算使用 gstreamer 的哪些功能?如果可能,您是否考虑过使用 QtMultimedia?
  • 如果不是ARM坏了,那么你的问题恐怕没有多大意义。那么,问题已经解决了,那你还问什么呢?这与嘲笑无关。
  • @Mawg:如果您有损坏的代码,但您不想修复它,您希望我们在这里告诉您什么,或者如示例所示,也许代码没有损坏,您只是由于原作者没有给你足够的信息,不知道如何正确构建它?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2013-11-26
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多