我需要将QSqlRecord转换为QVariant并返回整个项目.为了做到这一点,我补充道
Q_DECLARE_METATYPE(QSqlRecord);
Run Code Online (Sandbox Code Playgroud)
在需要强制转换的类的.h文件中.我还有一个基类,几个子节点从中继承,在这种情况下,我假设在基类中只包含一次Q_DECLARE_METATYPE就足够了.因此,我有例如:
当我尝试像这样运行程序时,我得到了
Redefinition of 'QMetaTypeId<QSqlRecord>
Run Code Online (Sandbox Code Playgroud)
来自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");
Run Code Online (Sandbox Code Playgroud)
从我如何理解Q_DECLARE_METATYPE的工作方式来看,这意味着如果我声明它,它会导致错误,因为它已经在其他地方声明了,但是如果我没有声明它我无法从QVariant转换,因为它无法识别对象作为一个有效的QVariant,我错过了什么?