qt c ++ metatype typeflag不匹配问题

时间:2016-12-25 08:14:46

标签: c++ qt

我遇到 qt元类型问题。

我有一个来自const pointer的类的qobject,并希望像QVariant一样加入:{/ p>

QVariant::fromValue(objectPointer)

我在派生类的头文件(.h)中使用:Q_DECLARE_METATYPE(const QDrivedClass *)声明了派生类的元类型。

但是在运行时,我得到了以下错误:

QMetaType::registerType: Binary compatibility break. Type flags for type 'const QDrivedClass *' [1093] don't match. Previously registered TypeFlags(0x10c), now registering TypeFlags(0x104).

我检查了整个项目,发现下面有一行代码可能导致此问题:

 qRegisterMetaType<T *>(QByteArray("const ") + QByteArray(T::staticMetaObject.className()) +
                   QByteArray("*"));

如果我对上述代码发表评论,则会修复Typeflag不匹配问题。但是它会引起另一个问题,因为我们需要使用派生类的信号/槽。

有人可以给我一些建议,为什么qRegisterMetaTypeQ_DECLARE_METATYPE对于从QObject派生的类的const指针有不同的类型标志以及如何修复它?

1 个答案:

答案 0 :(得分:0)

E4z9,感谢指出混合const和非const类型。

这是类型不匹配问题的根本原因。

我更改了以下代码:

qRegisterMetaType <const T *> (QByteArray("const ") + QByteArray(T::staticMetaObject.className()) + QByteArray("*"));

然后修复了类型不匹配问题。