我有一个自定义struct
,我将其用作派生类Q_PROPERTY
中的类型。QMediaPlayer
但这里的代码:
struct VideoMeta
{
Q_GADGET
Q_PROPERTY(int width MEMBER width)
Q_PROPERTY(...)
....
public:
int width;
...
};
Q_DECLARE_METATYPE(VideoMeta)
class FrameProvider : public QMediaPlayer
{
Q_OBJECT
Q_PROPERTY(VideoMeta videoMeta READ getVideoMeta WRITE setVideoMeta NOTIFY videoLoaded)
VideoMeta m_videoMeta;
...
}
我在一个Label
:
Label {
text: "Cached frames: " + cacheLoaded + " / " + frameProvider.videoMeta.framecount
}
这有点像魅力,但这里有一个转折点:如果我将声明的声明复制并粘贴struct
到宏的单独头文件中(并且显然包含它)Q_DECLARE_METATYPE
,我会收到以下错误:
QMetaProperty::read: Unable to handle unregistered datatype 'VideoMeta' for property 'FrameProvider::videoMeta'
所以我有两个问题:
- 不太重要的:为什么我需要使用
Q_DECLARE_METATYPE
宏,如果文档说我不需要Q_GADGET
宏,因为它会自动注册类型? - 更重要的是:为什么我不能将声明移到另一个头文件中?我错过了什么?
提前致谢!
编辑:
这可能是相关的:我在 Visual Studio (MSVC v142) 项目中使用 Qt v5.15。(不在 Qt Creator 中。)