Qt 重写QSqlTableModel类在qml 的 tableview中显示数据
在Qt中,可以通过重写QSqlTableModel类来在QML的TableView中显示数据。下面是一个示例:
- 首先,创建一个自定义的QSqlTableModel类,继承自QSqlTableModel,并重写data()方法来设置数据显示的格式。这个类将会提供给QML的TableView来显示数据。
class CustomSqlTableModel : public QSqlTableModel
{
Q_OBJECT
public:
explicit CustomSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase());
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
};
CustomSqlTableModel::CustomSqlTableModel(QObject *parent, QSqlDatabase db)
: QSqlTableModel(parent, db)
{
}
QVariant CustomSqlTableModel::data(const QModelIndex &index, int role) const
{
QVariant value = QSqlTableModel::data(index, role);
// 根据角色设置数据显示的格式
if (role == Qt::DisplayRole) {
if (value.isNull()) {
return "";
} else if (index.column() == 2) {
// 第3列数据显示为货币格式
return QString("$%1").arg(value.toDouble(), 0, 'f', 2);
}
}
return value;
}
- 在QML文件中,使用TableView来显示数据,并通过设置model属性为自定义的CustomSqlTableModel类的实例来显示数据。
import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.3
ApplicationWindow {
visible: true
width: 400
height: 300
TableView {
id: tableView
anchors.fill: parent
model: customTableModel
TableViewColumn {
role: "nameRole" // 数据库中的列名
title: "Name"
width: 100
}
TableViewColumn {
role: "ageRole" // 数据库中的列名
title: "Age"
width: 50
}
TableViewColumn {
role: "salaryRole" // 数据库中的列名
title: "Salary"
width: 100
}
}
Component.onCompleted: {
customTableModel.setTable("employees") // 数据库中的表名
customTableModel.select()
}
CustomSqlTableModel {
id: customTableModel
database: QSqlDatabase.database() // 设置数据库连接
}
}
上述示例中,我们通过设置model属性为customTableModel,来将数据库中的数据显示在TableView中。在CustomSqlTableModel类中,我们重写了data()方法,根据角色设置了数据显示的格式
原文地址: http://www.cveoy.top/t/topic/hWJB 著作权归作者所有。请勿转载和采集!