【发布时间】:2017-03-16 09:09:01
【问题描述】:
我需要将 QSqlRecord 转换为 QVariant 并在整个项目中返回。为此,我添加了
Q_DECLARE_METATYPE(QSqlRecord);
在需要转换的类的 .h 文件中。 我还有一个基类,几个子类从该基类继承,在这种情况下,我假设在基类中只包含一次 Q_DECLARE_METATYPE 就足够了。因此,我有例如:
- widgetBaseClass:声明元类型
- widgetChildClass1:继承widgetBaseClass 不声明元类型
- widgetChildClass2:继承 widgetBaseClass 不声明元类型
- myTableModel:声明元类型
当我尝试像这样运行程序时,我得到了
Redefinition of 'QMetaTypeId<QSqlRecord>
来自widgetBaseClass,指向myTableModel中的前一个声明。另一方面,如果我删除我得到的声明:
static_assert failed "Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system");
根据我对 Q_DECLARE_METATYPE 工作原理的理解,这意味着如果我声明它,它会导致错误,因为它已经在其他地方声明,但如果我不声明它,我不能从 QVariant 转换,因为它没有将对象识别为有效的 QVariant,我缺少什么?
【问题讨论】: