如何解决Q_PROPERTY 必须在 Qt 6 中完全定义错误
使用 Qt 5 可以使用这样的代码:
// Test.h
#include <QObject>
#include <QMetaObject>
class LanguageModel;
class Test : public QObject
{
Q_OBJECT
Q_PROPERTY(LanguageModel*,...)
public:
};
// Test.cpp
#include "Test.h"
#include "LanguageModel.h"
// LanguageModel.h
#include <QObject>
#include <QMetaObject>
class LanguageModel : public QObject
{
Q_OBJECT
}
现在我正在尝试将项目转换为 Qt 6,但上面的代码在生成的“debug\moc_Test.cpp”文件中失败并显示以下错误消息:
C:\Qt\6.1.0\msvc2019_64\include\QtCore\qmetatype.h:778: error: C2338: Type argument of Q_PROPERTY or Q_DECLARE_METATYPE(T*) must be fully defined
用直接头文件替换类前向定义包括工作:
// Test.h
#include <QObject>
#include <QMetaObject>
#include "LanguageModel.h" //class LanguageModel;
class Test : public QObject
{
Q_OBJECT
Q_PROPERTY(LanguageModel*,...)
public:
};
如何继续使用类定义而不是在 Qt 6 中包含头文件?
问候,
解决方法
我不是专家,但从 Qt 6.0 开始,由于静态断言,它似乎是必需的。证明:https://embeddeduse.com/2021/01/17/migrating-a-harvester-hmi-from-qt-5-12-to-qt-6-0/(章节'错误:'sizeof'无效应用到不完整类型'IntegerRangeModel'')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。