在Qt编程中将数据库的数据在UI上展示
上一篇说到怎么用JS连接数据库,这篇说一下拿到数据后怎么展示到UI上。
Qt的Model框架是Model-View架构的核心部分,用于管理和表示数据。它提供了一种标准化的方式来将数据与用户界面分离,使得数据可以以多种形式展示。
在这个架构下,Model负责管理数据,View负责展示数据,Delegate负责数据显示和编插的细节,简单来说,我们需要一个View来展示数据,View里面指定一个Model指定数据的来源,每一项数据通过Delegate展示出来,相当于列表中的每一行。
下面的例子通过JS读取数据库,使用SilicaListView作为View,ListModel作为Model,ListItem作为Delegate,展示如何将数据库的数据展示到视图上。
先在JS文件中定义读取数据库的函数。
.import QtQuick.LocalStorage 2.0 as SQL function getDatabase() { return SQL.LocalStorage.openDatabaseSync("days", "1.0", "daysinfo", 25000); } function getDays(status) { var sql = 'SELECT * FROM day;'; if( status === "favorite" ) { sql = 'SELECT * FROM day WHERE favorite = 1;'; } var db = getDatabase() listModel.clear()//listModel是QML中ListModel的id db.transaction(function(tx) { var rs = tx.executeSql(sql); if ( rs.rows.length > 0 ) { for ( var i = 0; i < rs.rows.length; i++){ listModel.append({ "dayid": rs.rows.item(i).dayid, "name": rs.rows.item(i).name, "year": rs.rows.item(i).year, "month": rs.rows.item(i).month, "day": rs.rows.item(i).day, "datetext": rs.rows.item(i).datetext, "favorite": rs.rows.item(i).favorite } ) } } }) }
然后在QML文件创建一个SilicaListView,里面创建ListModel和ListItem,以展示数据库中name字段为例。
SilicaListView {
id: listview
ListModel {
id: listModel
}
model: listModel
delegate: ListItem {
id: listItem
Label {
id: nametext
text: name
}
}
这个时候我们就创建好View、Model和Delegate了,下一步就是将数据填充到Delegate上。Qt Quick的组件提供了一个onCompleted信号,当组件完成初始化的时候会发射,我们就利用这个信号槽,在组件完成初始化的时候加载数据。
SilicaListView { id: listview ...... Component.onCompleted: { ST.getDays("all") } ...... }
完成这一步,就成功将数据展示到视图上了。

浙公网安备 33010602011771号