C++ 子类化QObject并创建QList

C++ 子类化QObject并创建QList,c++,class,inheritance,qml,subclass,C++,Class,Inheritance,Qml,Subclass,这是我的密码: 这是我的错误:main.cpp:32:error:undefined引用'vtable for SongObject' 当我从SongObject类中删除Q_对象时,错误消失,应用程序启动,但在QML中使用songList时,它表示名称未定义,颜色未定义。这是我的QML: ListView { width: 100; height: 100 model: allSongObjects delegate: Rectangle {

这是我的密码:

这是我的错误:main.cpp:32:error:undefined引用'vtable for SongObject'

当我从SongObject类中删除Q_对象时,错误消失,应用程序启动,但在QML中使用songList时,它表示名称未定义,颜色未定义。这是我的QML:

ListView {
        width: 100; height: 100

        model: allSongObjects
        delegate: Rectangle {
            height: 25
            width: 100
            color: {
                console.log(model.modelData.name)
                return color
            }
            Text { text: name }
        }
    }
下面是我如何将歌曲列表传递给QML的:

 engine.rootContext()->setContextProperty("allSongObjects", QVariant::fromValue(getAllSongs(db)));
我是C++新手,所以我肯定这个问题对这里的人来说是很明显的。我很感激能得到的任何帮助。我只是想知道为什么我会遇到这些问题,我的代码应该是怎样的,当我看到正确的代码时,我可能会理解为什么会是这样


感谢您的帮助。

头文件写得不正确。更正(和工作)收割台为

#ifndef SONG_OBJECT_MAIN
#define SONG_OBJECT_MAIN

#include <QObject>

class SongObject : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString path READ path CONSTANT)
    Q_PROPERTY(QString title READ title CONSTANT)
    Q_PROPERTY(QString album READ album CONSTANT)
    Q_PROPERTY(QString artist READ artist CONSTANT)
    Q_PROPERTY(QString art READ art CONSTANT)
    QString m_path;
    QString m_title;
    QString m_album;
    QString m_artist;
    QString m_art;


    QString path() { return m_path;}
    QString title() { return m_title;}
    QString album() { return m_album;}
    QString artist() {return m_artist;}
    QString art() {return m_art;}

public:
    explicit SongObject(const QString &path, const QString &title, const QString &album, const QString &artist, const QString &art) :
        QObject(),
        m_path(path),
        m_title(title),
        m_album(album),
        m_artist(artist),
        m_art(art)
    {}

};

#endif // SONG_OBJECT_MAIN
\ifndef SONG\u OBJECT\u MAIN
#定义歌曲\对象\主
#包括
类SongObject:公共QObject
{
Q_对象
Q_属性(QString路径读取路径常数)
Q_属性(QString title READ title常量)
Q_属性(QString相册读取相册常数)
Q_属性(QString艺术家读取艺术家常数)
Q_属性(Q字符串艺术读取艺术常数)
QString m_路径;
QString mu title;
QString m_专辑;
QString m_艺术家;
QString m_艺术;
QString路径(){return m_path;}
QString title(){return m_title;}
QString album(){return m_album;}
QString艺术家(){return m_artist;}
QString art(){return m_art;}
公众:
显式SongObject(常量字符串和路径、常量字符串和标题、常量字符串和相册、常量字符串和艺术家、常量字符串和艺术):
QObject(),
m_路径(路径),
m_头衔(头衔),
m_专辑(专辑),
m_艺术家(艺术家),
艺术硕士(艺术)
{}
};
#endif//SONG\u OBJECT\u MAIN