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;格里布,因为努力。
也许有一种方法可以将库用于其中一种,而不是将它们的目录包含在源路径中?
答案 0 :(得分:3)
只需关注qmake项目文件中的this documentation:
CONFIG += no_keywords
如果您使用的不是qmake,请确保在您的构建系统中定义以下内容:
QT_NO_KEYWORDS
然后,您需要确保在标题中的所有位置使用Q_SIGNALS或Q_SIGNAL,以便仍然通知moc(元对象编译器)它是一个信号。
答案 1 :(得分:0)
我找到了另一个解决方案,对我来说更方便和简单 - 你应该在Qt标头之前包含glib标头,这就是全部。正如之前的glib代码一样,它不受Qt define语句的影响。