要在QSqlTableModel的data()函数中定义Qt.UserRole,在QML的TableView中显示数据,可以按照以下步骤进行操作:

  1. 创建一个自定义的QSqlTableModel类,重写data()函数,并在其中定义Qt.UserRole。
#include <QSqlTableModel>
#include <QVariant>

class CustomSqlTableModel : public QSqlTableModel
{
public:
    CustomSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
        : QSqlTableModel(parent, db)
    {
    }

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
    {
        if (role == Qt::UserRole) {
            // 返回自定义的数据,可以根据需要进行修改
            return QSqlTableModel::data(index, Qt::DisplayRole).toString() + " (Custom)";
        }

        return QSqlTableModel::data(index, role);
    }
};
  1. 在QML中,创建一个TableView,并将其绑定到自定义的QSqlTableModel。
import QtQuick 2.12
import QtQuick.Controls 2.12

TableView {
    id: tableView
    anchors.fill: parent

    model: customModel
    TableViewColumn {
        role: "displayRole"
        title: "Data"
        width: 100
    }
}

Component.onCompleted: {
    customModel.query = "SELECT * FROM your_table"
    customModel.select()
}
  1. 在C++中,将QML中的TableView绑定到自定义的QSqlTableModel。
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlTableModel>
#include <QSqlRecord>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    // 创建数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");

    // 打开数据库
    if (!db.open()) {
        qDebug() << "Failed to open database:" << db.lastError().text();
        return -1;
    }

    // 创建表格
    QSqlQuery query;
    query.exec("CREATE TABLE your_table (id INT PRIMARY KEY, name VARCHAR(255))");

    // 插入数据
    query.exec("INSERT INTO your_table VALUES (1, 'John')");
    query.exec("INSERT INTO your_table VALUES (2, 'Alice')");
    query.exec("INSERT INTO your_table VALUES (3, 'Bob')");

    // 创建自定义的QSqlTableModel类
    CustomSqlTableModel customModel;
    customModel.setTable("your_table");

    // 创建QML引擎
    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("customModel", &customModel);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

现在,运行程序,你应该能看到QML中的TableView中显示了数据,并在每个单元格中显示了自定义的数据

Qt 重写QSqlTableModel类在data中定义QtUserRole在qml 的 tableview中显示数据

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

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