Qt 重写QSqlTableModel类在data中定义QtUserRole在qml 的 tableview中显示数据
要在QSqlTableModel的data()函数中定义Qt.UserRole,在QML的TableView中显示数据,可以按照以下步骤进行操作:
- 创建一个自定义的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);
}
};
- 在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()
}
- 在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中显示了数据,并在每个单元格中显示了自定义的数据
原文地址: http://www.cveoy.top/t/topic/hWJP 著作权归作者所有。请勿转载和采集!