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 不能一起玩。还是有办法解决这个问题?
注:Qt可以说服
#define signals signals
我不#define Q_MOC_RUN
。但这会导致使用 的类出现问题
class
{
public:
// stuff
signals:
// stuff
private:
// stuff
};
你现在可能已经猜到了,我正试图从不支持它的人那里接管代码,而谷歌不是我的朋友:-(
[更新] 谢谢,@IpApp 从小费(这是行不通的,唉)。
我得到了别人的代码。显然它是为目标构建的,但从来没有为单元测试构建过,我必须这样做(我不知道他为什么要混合和匹配)。
当我在 Eclipse CDT 中使用 QT_NO_KEYWORDS 时,我得到错误,因为类定义代码不使用 Q_SINGAL(S) - 它使用信号宏(现在定义为信号)来定义某些公共成员。
不允许我更改子系统代码,只是为了模拟它的接口,但我不愿意模拟所有 Qt 和 Glib,因为这很费力。
也许有一种方法可以将库用于一个或另一个,而不是将它们的目录包含在源路径中?
我找到了另一个对我来说更方便和简单的解决方案——你应该在 Qt 头文件之前包含 glib 头文件,仅此而已。正如之前的 glib 代码一样,它不受 Qt define 语句的影响。
来自 QT 文档:
QT_NO_SIGNALS_SLOTS_KEYWORDS
slots
替换为Q_SLOTS
,signals
替换为Q_SIGNALS