简体   繁体   中英

SubClassing QObject and creating QList

Here is my code: http://pastebin.com/57hXKCYm

Here is my error: main.cpp:32: error: undefined reference to `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. Here is my 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:

 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. 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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