当模型更改时,qml 中的 QML ListView 不会更新

时间:2021-05-29 16:11:40

标签: c++ qt model qml

我正在尝试从 cpp 文件更新 QML ListView 中的模型..

这是我的实现。我把所有的东西都复制到了这个,因此它的代码大小会大一点。

这是我的模型实现albummodel.h

#include <QAbstractListModel>
#include <QStringList>
#include <QQmlListProperty>

class Album
{
public:
    Album(const QString &type, const QString &size);


    QString type() const;
    QString size() const;

private:
    QString m_type;
    QString m_size;

};

class AlbumModel : public QAbstractListModel
{
    Q_OBJECT
    Q_PROPERTY(QQmlListProperty<QObject> myModel NOTIFY listChanged)

public:

    enum AlbumRoles {
        TypeRole = Qt::UserRole + 1,
        SizeRole
    };

    AlbumModel(QObject *parent = 0);

    //QQmlListProperty<QObject> getList();

    void addAlbum(const Album &album);

    int rowCount(const QModelIndex & parent = QModelIndex()) const;

    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;

protected:
    QHash<int, QByteArray> roleNames() const;
private:
    QList<Album> m_albums;
signals:
    void listChanged();
#include <QAbstractListModel>
#include <QStringList>
#include <QQmlListProperty>

class Album
{
public:
    Album(const QString &type, const QString &size);


    QString type() const;
    QString size() const;

private:
    QString m_type;
    QString m_size;

};

class AlbumModel : public QAbstractListModel
{
    Q_OBJECT
    Q_PROPERTY(QQmlListProperty<QObject> myModel NOTIFY listChanged)

public:

    enum AlbumRoles {
        TypeRole = Qt::UserRole + 1,
        SizeRole
    };

    AlbumModel(QObject *parent = 0);

    //QQmlListProperty<QObject> getList();

    void addAlbum(const Album &album);

    int rowCount(const QModelIndex & parent = QModelIndex()) const;

    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;

protected:
    QHash<int, QByteArray> roleNames() const;
private:
    QList<Album> m_albums;
signals:
    void listChanged();
};

这是我的专辑模型.cpp

#include "albummodel_mediaplayer.h"

Album::Album(const QString &type, const QString &size)
    : m_type(type), m_size(size)
{
}

QString Album::type() const
{
    return m_type;
}

QString Album::size() const
{
    return m_size;
}

AlbumModel::AlbumModel(QObject *parent)
    : QAbstractListModel(parent)
{
}

void AlbumModel::addAlbum(const Album &album)
{
    beginInsertRows(QModelIndex(), rowCount(), rowCount());
    m_albums << album;
    endInsertRows();

    emit listChanged();
}

int AlbumModel::rowCount(const QModelIndex & parent) const {
    Q_UNUSED(parent);
    return m_albums.count();
}

QVariant AlbumModel::data(const QModelIndex & index, int role) const {
    if (index.row() < 0 || index.row() >= m_albums.count())
        return QVariant();

    const Album &Album = m_albums[index.row()];
    if (role == TypeRole)
        return Album.type();
    else if (role == SizeRole)
        return Album.size();
    return QVariant();
}


QHash<int, QByteArray> AlbumModel::roleNames() const {
    QHash<int, QByteArray> roles;
    roles[TypeRole] = "type";
    roles[SizeRole] = "size";
    return roles;
}


/*QQmlListProperty<QObject> AlbumModel::getList(){
    return QQmlListProperty<QObject>(this, *list);
}*/

和我的 qml 文件 导入相册模型 1.0 列表显示 { 模型:AlbumModel.myModel 委托:playListThumbnail 成分 { id:播放列表缩略图

            Item {
 Text {
                    id: albumTitleText
                    text:  type//item_title 
}}
....
}

我添加了主程序代码。希望这对于 mvp 来说已经足够了 主.cpp

 void main() {
       qmlRegisterType<AlbumModel>("AlbumModel",1,0,"AlbumModel");
       Album g("test", "test");
        AlbumModel h();
        h.addAlbum(g);
   }

但是模型没有更新。我错过了哪个信号?

0 个答案:

没有答案
相关问题