简体   繁体   English

子类化QObject并创建QList

[英]SubClassing QObject and creating QList

Here is my code: http://pastebin.com/57hXKCYm 这是我的代码: http : //pastebin.com/57hXKCYm

Here is my error: main.cpp:32: error: undefined reference to `vtable for SongObject' 这是我的错误:main.cpp:32:错误:未定义对`vtable for SongObject'的引用

When I remove the Q_OBJECT from the SongObject class, the error goes away, and the app launches, but when useing the songList in QML, it says name is undefined, and color is undefined. 当我从SongObject类中删除Q_OBJECT时,错误消失了,应用启动了,但是在QML中使用songList时,它说名称未定义,颜色未定义。 Here is my QML: 这是我的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 }
        }
    }

Here is how I'm passing the songList to QML: 这是我将songList传递给QML的方法:

 engine.rootContext()->setContextProperty("allSongObjects", QVariant::fromValue(getAllSongs(db)));

I am a novice to C++, and so I'm sure the issue is going to be very obvious to someone here. 我是C ++的新手,所以我敢肯定,对于这里的人来说,问题将非常明显。 I appreciate any help I can get. 感谢您能提供的任何帮助。 I just want to know WHY I'm getting hte issues, and how my code SHOULD be, and I'll probably understand why it should be that way when I see the corrected code. 我只想知道为什么会遇到问题,以及我的代码应如何处理,当我看到正确的代码时,我可能会明白为什么应该这样。

Thanks for any help. 谢谢你的帮助。

The header file was written incorrectly. 头文件写入错误。 The corrected (and working) header is 更正的(和有效的)标头是

#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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM