我在使用qml写代码,我需要实现一个名为MySql的类,initSql函数连接本地数据库,selectData函数查询数据库中名为tb的数据表,数据表中有两列,为id和name。main.qml中有一个tableView,tableView中两列分别为id和name有一个model属性,现在需要将MySql类中查询到的数据加载到model属性中,从而使查询到的数据渲染到表格中,并且做到一一对应
时间: 2024-03-05 22:54:24 浏览: 137
QML的TableView中实现数据以不同的形式进行表现-对每列进行自定义
4星 · 用户满意度95%
你可以在Qt中使用QtSql模块来实现连接MySQL数据库和查询数据表的功能。下面是一个简单的示例:
MySql类的实现:
```
import QtSql 2.0
class MySql {
property variant model
function initSql() {
var db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost") // 设置主机名
db.setDatabaseName("your_db_name") // 设置数据库名
db.setUserName("your_username") // 设置用户名
db.setPassword("your_password") // 设置密码
if (db.open()) {
console.log("Database connected!")
} else {
console.log("Database connection failed!")
}
}
function selectData() {
var query = QSqlQuery()
query.prepare("SELECT id, name FROM tb")
if (query.exec()) {
var list = []
while (query.next()) {
var id = query.value(0)
var name = query.value(1)
list.push({"id": id, "name": name})
}
model = list
} else {
console.log("Query failed!")
}
}
}
```
main.qml中的TableView的实现:
```
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
Page {
// ...
TableView {
id: tableView
anchors.fill: parent
model: mySql.model
TableViewColumn {
role: "id"
title: "ID"
}
TableViewColumn {
role: "name"
title: "Name"
}
}
// ...
}
```
在main.qml中使用MySql类:
```
import QtQuick 2.12
// ...
MySql {
id: mySql
}
Component.onCompleted: {
mySql.initSql()
mySql.selectData()
}
// ...
```
这样就可以将查询到的数据渲染到TableView中了。
阅读全文