在Qt中,可以通过重写QSqlTableModel类来在QML的TableView中显示数据。下面是一个示例:

  1. 首先,创建一个自定义的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;
}
  1. 在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()方法,根据角色设置了数据显示的格式

Qt 重写QSqlTableModel类在qml 的 tableview中显示数据

原文地址: http://www.cveoy.top/t/topic/hWJB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录