我创建了一个基于 QAbstractListModel 的 ListView 模型,类似于此示例。问题是我的 ListView 不显示所有行,而只显示那些最初可见的行。所以当我向下滚动(或轻弹)时,只有黑色空间。ListView 有 count == 0 但它应该有 count == 10,因为我添加了 10 个元素。
我的课程包含更新模型 rowCount 的必要方法
// needed as implementation of virtual method
int rowCount(const QModelIndex & parent) const {
return standings.size();
}
int rowCount() {
return standings.size();
}
void addStanding(const Standing &st) {
beginInsertRows(QModelIndex(), rowCount(), rowCount());
qDebug() << "row cnt: " << rowCount();
standings << st;
endInsertRows();
}
我还更新了 ListView 模型
rootContext = (QDeclarativeContext*)(viewer->rootContext());
rootContext->setContextProperty("myModel", &sm);
QML 代码
ListView {
id: raceList
objectName: "standingList"
y: header.height
width: parent.width
height: parent.height - header.height
clip: true
model: myModel
delegate: rowComp
}
Component {
id: rowComp
SessionRowDelegate { }
}
我还想提一下,这适用于静态模型。 如何让 ListView 一直显示所有项目,而不仅仅是对用户可见?
SessionRowDelegate
Rectangle {
id: rowbg
width: parent.width
height: 34 * (1 + (parent.width - 360) * 0.002)
// contains other elements with height not exceeding rowbg's height
// ...
}