在qml中公开c ++模型

时间:2015-08-07 15:14:22

标签: qt qml

我创建了这个c ++类并且暴露给Qml ListView但是,它有一些问题。我可以看到列表中有项目,但是我无法看到任何数据(我看到25个空按钮)。在控制台中,将显示以下消息:" type is undefined"。我已经检查并正确输入一个完整的字符串;

ListView{
    id: listView
    anchors.fill: parent
    model: postsModel
    delegate: Component{

        Button{
            text: type
        }
    }
}

#include "listmodel.h"

ListModel::ListModel(QObject *parent)
    : QAbstractListModel(parent)
{

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

QVariantMap ListItem::dataMap() const
{
return m_dataMap;
}
void ListModel::addElement(const ListItem& element)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_elementsList << element;
endInsertRows();
}
QVariant ListModel::data(const QModelIndex & index, int role) const
{
    if (index.row() < 0 || index.row() >= m_elementsList.count())
         return QVariant();

    const ListItem &item= m_elementsList[index.row()];
    if (role == TypeRole)
        return item.type();
    else if (role == DataRole)
        return item.dataMap();
    return QVariant();
}
int ListModel::rowCount(const QModelIndex & parent) const {
     return m_elementsList.count();
}
QHash<int, QByteArray> ListModel::roleNames()
{
    QHash<int, QByteArray> roles;
    roles[TypeRole] = "type";
    roles[DataRole] = "dataMap";
    return roles;
}

1 个答案:

答案 0 :(得分:0)

好吧,我找到了解决问题的方法。问题是ListView没有被我实现的模型更新。这是因为我的错误在于没有调用beginInsertRows()和endInsertRows()函数。