对QObject进行子分类并创建QList

SubClassing QObject and creating QList

本文关键字:创建 QList 分类 QObject      更新时间:2023-10-16

这是我的代码:http://pastebin.com/57hXKCYm

这是我的错误:main.cpp:32:error:对`vtable for SongObject'的未定义引用

当我从SongObject类中删除Q_OBJECT时,错误消失,应用程序启动,但当在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