qt 自定义QSqlTableModel中的数据在qml tableview中显示
要在QML的TableView中显示自定义QSqlTableModel中的数据,需要做以下几个步骤:
- 定义一个自定义的QSqlTableModel类,继承自QSqlTableModel,并重写data()函数,以返回QVariant类型的数据。
class CustomSqlTableModel : public QSqlTableModel
{
Q_OBJECT
public:
explicit CustomSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
: QSqlTableModel(parent, db) {}
QVariant data(const QModelIndex &index, int role) const override
{
if (role == Qt::DisplayRole) {
// 获取数据
QVariant value = QSqlTableModel::data(index, Qt::DisplayRole);
// 在这里可以根据需要进行数据处理,比如格式化日期等
return value;
}
return QSqlTableModel::data(index, role);
}
};
- 在QML中导入自定义的QSqlTableModel类,并创建一个实例。
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Window 2.15
import QtSql 2.3
Window {
visible: true
width: 640
height: 480
title: "QML TableView"
QSqlDatabase {
id: database
// 配置数据库连接
}
Component.onCompleted: {
database.open();
}
TableView {
id: tableView
anchors.fill: parent
model: CustomSqlTableModel {
id: customModel
table: "your_table_name"
// 设置数据库连接
database: database
// 设置表名
// 设置排序规则等其他需要的属性
// ...
}
// 定义表头
headerDelegate: Item {
width: tableView.columnWidthProvider(model.headerData(visualIndex, Qt.Horizontal, Qt.DisplayRole))
height: 30
Text {
text: model.headerData(visualIndex, Qt.Horizontal, Qt.DisplayRole)
anchors.centerIn: parent
}
}
// 定义表格内容
delegate: Item {
width: tableView.columnWidthProvider(model.data(index, Qt.DisplayRole))
height: 30
Text {
text: model.data(index, Qt.DisplayRole)
anchors.centerIn: parent
}
}
}
}
这样就可以在QML的TableView中显示自定义的QSqlTableModel中的数据了。需要注意的是,需要在main函数中注册QML类型。
qmlRegisterType<CustomSqlTableModel>("CustomSqlTableModel", 1, 0, "CustomSqlTableModel");
``
原文地址: http://www.cveoy.top/t/topic/hIsU 著作权归作者所有。请勿转载和采集!