-
sqlquerymodel.h
#ifndef SQLQUERYMODEL_H
#define SQLQUERYMODEL_H#include
class MySqlTableModel : public QSqlTableModel
{
Q_OBJECTpublic:
explicit MySqlTableModel(QObject *parent = Q_NULLPTR, QSqlDatabase db = QSqlDatabase());
virtual QHash<int, QByteArray> roleNames() const;
QVariant data(const QModelIndex &index, int role) const;
};#endif // SQLQUERYMODEL_H
-
sqlquerymodel.cpp
#include “sqlquerymodel.h”
#include
#include
#include
MySqlTableModel::MySqlTableModel(QObject *parent, QSqlDatabase db):
QSqlTableModel(parent, db)
{
}
QHash<int, QByteArray> MySqlTableModel::roleNames() const
{
QHash<int, QByteArray> roleNames;
for( int i = 0; i < record().count(); i++) {
roleNames[Qt::UserRole + i] = record().fieldName(i).toUtf8();
}
return roleNames;
}
QVariant MySqlTableModel::data(const QModelIndex &index, int role) const
{
QVariant value = QSqlTableModel::data(index, role);
if(role < Qt::UserRole)
{
value = QSqlTableModel::data(index, role);
}
else
{
int columnIdx = role - Qt::UserRole;
QModelIndex modelIndex = this->index(index.row(), columnIdx);
value = QSqlTableModel::data(modelIndex, Qt::DisplayRole);
}
return value;
}
-
main.cpp
#include
#include
#include
#include
#include
#include “sqlquerymodel.h”int main(int argc, char *argv[])
{
//
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;// 创建数据库及表格 QSqlDatabase m_db = QSqlDatabase::addDatabase("QSQLITE"); m_db.setDatabaseName("customdb"); bool ret = m_db.open(); QSqlQuery query(m_db); QString sql = QString("create table table_1(col_1 INTERGER, col_2 INTERGER)"); ret = query.exec(sql); // 插入数据 if(ret == true) { for(int i=0; i<10; i++) { sql = QString("INSERT INTO table_1 (col_1, col_2) VALUES (:col_1, :col_2)"); query.prepare(sql); query.bindValue(":col_1", QVariant(i)); query.bindValue(":col_2", QVariant(i*2)); ret = query.exec(); Q_ASSERT(ret != false); } } // 创建查询模型 MySqlTableModel *model = new MySqlTableModel(Q_NULLPTR, m_db); model->setTable("table_1"); model->setEditStrategy(QSqlTableModel::OnFieldChange); model->select(); model->setHeaderData(0, Qt::Horizontal, ("no")); model->setHeaderData(1, Qt::Horizontal, ("longi")); engine.rootContext()->setContextProperty("myFirstModel", model); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec();
}
4.main.qml
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Row{
Button{
id: btnAddRow
text: "增加"
}
Button{
id: btnDelRow
text: "删除"
onClicked: {
//myFirstModel.
}
}
Button{
id: btnModRow
text: "修改"
}
Button{
id: btnSubRow
text: "提交"
}
}
TableView {
id: tableView
y:50
width: 300
TableViewColumn {
role: "col_1"
title: "xx"
width: 100
}
TableViewColumn {
role: "col_2"
title: "yy"
width: 200
}
model: myFirstModel
}
}