qml 的listview 如何使用QStandardItemModel
时间: 2025-02-28 16:23:09 浏览: 11
如何在 QML ListView 中使用 QStandardItemModel
为了使 QStandardItemModel
能够被 QML 访问并用于 ListView
,需要将其作为上下文属性注册到根上下文中。这可以通过 C++ 代码实现,在其中创建模型实例并将其实例化为 QML 可访问的对象。
创建和填充 QStandardItemModel 实例
首先,在C++端构建一个标准项模型,并为其添加若干条目:
#include <QQmlApplicationEngine>
#include <QStandardItemModel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
// 构建数据模型
QStandardItemModel model(4,1); // 行数列数
QStringList persons {"Alice", "Bob", "Carol", "Donald"};
for (int i=0; i<model.rowCount(); ++i){
QStandardItem* item = new QStandardItem(persons[i]);
model.setItem(i, 0, item);
}
这段代码初始化了一个四行一列的标准项模型,并依次填入四个字符串类型的列表元素[^1]。
注册模型以便于 QML 使用
为了让上述创建的数据源能够在 QML 文件里得到利用,还需要借助 rootContext()
方法把该模型设置成全局可用的属性——这里命名为 "cppModel"
:
engine.rootContext()->setContextProperty("cppModel", &model);
// 加载主界面文件
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
...
}
此时已经完成了准备工作的一部分;接下来转向 QML 方面的工作。
在 QML 中展示来自 C++ 的 Model 数据
下面是在 QML 页面上呈现这些信息的方式之一:
import QtQuick 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Using QStandardItemModel with ListView")
ListView {
anchors.fill: parent
model: cppModel // 这里的 cppModel 是之前设定好的 context property 名字
delegate: Item {
Text {
text: display // 显示每一行的内容
font.pixelSize: 24
}
height: childrenRect.height
width: parent.width
}
spacing: 10
}
}
以上就是完整的流程说明以及具体操作指南,展示了怎样将基于 C++ 编写的 QStandardItemModel
整合进 QML 用户界面上的一个简单例子。
阅读全文
相关推荐













