У меня есть собственный 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
, потому что он автоматически регистрирует тип? - Важнее: почему я не могу переместить объявление в другой файл заголовка? Что мне не хватает?
Заранее спасибо!
EDIT:
Это может быть актуально: я использую Qt v5.15 в Visual Studio (MSV C v142) проект. (Нет в Qt Creator.)