我创建了这个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;
}
答案 0 :(得分:0)
好吧,我找到了解决问题的方法。问题是ListView没有被我实现的模型更新。这是因为我的错误在于没有调用beginInsertRows()和endInsertRows()函数。