我遇到 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
不匹配问题。但是它会引起另一个问题,因为我们需要使用派生类的信号/槽。
有人可以给我一些建议,为什么qRegisterMetaType
和Q_DECLARE_METATYPE
对于从QObject
派生的类的const指针有不同的类型标志以及如何修复它?
答案 0 :(得分:0)
E4z9,感谢指出混合const和非const类型。
这是类型不匹配问题的根本原因。
我更改了以下代码:
qRegisterMetaType <const T *> (QByteArray("const ") + QByteArray(T::staticMetaObject.className()) + QByteArray("*"));
然后修复了类型不匹配问题。