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;
      |                                                        ^~~~~

Но я не понимаю, чего мне не хватает.

0 ответов

Другие вопросы по тегам