Qt似乎以Q
开头命名其他所有内容,它做到了这一点:qobjectdefs.h
中的#define signals signals
。
然而,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
};
正如你现在可能已经猜到的,我正试图从一个不在身边支持它的人那里接管代码,谷歌不是我的朋友:-(
[更新]谢谢,@IpApp的提示(这是不起作用的,唉)。
我得到了别人的密码。显然它是为目标构建的,但从来没有为单元测试构建过,我必须这样做(为什么他混合和匹配,我不知道)。
当我在Eclipse CDT中使用QT_NO_KEYWORDS时,我会得到错误,因为类定义代码没有使用Q_SINGAL(S)-它使用signals宏(现在定义为signals)来定义某些公共成员。
我不被允许修改subsytsem代码,只是为了模拟它的接口,但我不喜欢模拟所有的Qt和Glib,因为工作量很大。
也许有一种方法可以为其中一个或另一个使用库,而不是将它们的目录包含在源路径中?
3条答案
按热度按时间mbjcgjjk1#
只需在您的qmake项目文件中遵循以下文档:
如果你使用的不是qmake,请确保在你的buildsystem中定义了以下内容:
然后,你需要确保你在头文件的所有地方都使用了Q_SIGNALS或Q_SIGNAL,这样moc( meta对象编译器)仍然会被通知它是一个信号。
t2a7ltrp2#
我发现了另一个解决方案,对我来说更方便和简单-你应该在Qt头之前包括glib头,仅此而已。正如之前的glib代码一样,它不受Qt定义语句的影响。
kx1ctssn3#
来自QT文档:
QT_NO_SIGNALS_SLOTS_KEYWORDS
Q_SLOTS
替换slots
,用Q_SIGNALS
替换signals