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_SIGNALS或Q_SIGNAL,以便仍向moc(元对象编译器)通知它是一个信号。
关于c++ - Qt #define "signals"与GStreamer(GST)发生冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27523281/