Qt5 не находит член структуры, объявленный с помощью Q_GADGET
Qt 5.15.10 для встроенного Linux. Я пытаюсь сделать то, что предложено в этом и этом ответах. Моя цель — получить доступ кQ_PROPERTY
currentSong
из КМЛ.
Моя попытка:
class Songs : public QObject
{
Q_OBJECT
public:
typedef struct Song
{
Q_GADGET
Q_PROPERTY(QString title MEMBER title)
Q_PROPERTY(QString author MEMBER author)
Q_PROPERTY(QString lyrics MEMBER lyrics)
Q_PROPERTY(int priority MEMBER priority)
Q_PROPERTY(QImage cover MEMBER cover)
bool operator != (const Song &val)
{
if (val.title != this->title) return false;
//...
return true;
}
public:
QString title;
QString author;
QString lyrics;
int priority;
QImage cover;
} Song;
Q_PROPERTY(Song currentSong MEMBER _currentSong)
explicit Songs(QObject *parent = nullptr);
private:
Song _currentSong;
}
Q_DECLARE_METATYPE(Songs::Song)
и в main.cpp:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
Songs songs;
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl)
{
if (!obj && url == objUrl) QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
qRegisterMetaType<Songs::Song>();
engine.rootContext()->setContextProperty("songs", &songs);
engine.load(url);
return app.exec();
}
Но у меня еще много ошибок такого рода:
[...]/moc_songs.cpp:83: error: ‘class Songs’ has no member named ‘title’
moc_songs.cpp: In static member function ‘static void Songs::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)’:
moc_songs.cpp:83:56: error: ‘class Songs’ has no member named ‘title’
83 | case 0: *reinterpret_cast< QString*>(_v) = _t->title; break;
| ^~~~~
Но я не понимаю, чего мне не хватает.