QSqlTableModel类为单个数据库表提供了一个可编辑的数据模型。QSqlTableModel是一个从单个表读取和写入数据库记录的高级接口。它构建在较低级别的QSqlQuery之上,并且可以用来提供数据给诸如QTableView的视图类(以查看数据)。
1.在表格中查看QSqlite数据库中的数据
例1:初始化实现一个表格;使用数据库中的哪个表格等信息在drawingTable中实现
//初始化
mdiArea = new QWidget;//mainwindow中的主widget
setCentralWidget(mdiArea);
tableview = new QTableView;
itemModel = new QStandardItemModel;
itemModel->setColumnCount(4);
layout = new QVBoxLayout(this);
layout->addWidget(tableview);
mdiArea->setLayout(layout);
drawingTable();
void MainWindow::drawingTable()
model = new QSqlTableModel(mdiArea);//基于主widget
model->setTable("student");//数据库中表的名字
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
bool isSelect = model->select();//选择整张表
tableview->setModel(model);//为表设置model
将数据库修改成GUI_主接线图
void MainWindow::drawingTable()
model = new QSqlTableModel(mdiArea);
//model->setTable("student");
model->setTable(tr("GUI_主接线图"));
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
bool isSelect = model->select();
tableview->setModel(model);
2.修改数据
在上述代码的基础上,添加一个按钮,按钮的槽函数实现如下:
void MainWindow::slt_modify()
bool istrans = model->database().transaction();//开始事务操作
if (!istrans)
return;
if (model->submitAll())//是否等待变化,提交到缓存
model->database().commit();//修改的数据提交数据库
model->database().rollback();//回滚
QMessageBox::warning(this,"tableModel","database error");
3.撤销修改
void MainWindow::slt_cancel()
model->revertAll();//取消缓存中更改数据
例子:将下图红框中的30改为80,然后按撤销,由80改回30。但是点击modify之后再点击cancel就不能取消了。这个模型可以将所有修改先保存到model中,只有当我们执行提交修改后,才会真正写入数据库。当然这也是因为我们在最开始设置了它的保存策略。
添加一个按钮,用于查询符合条件的数据,其槽函数实现如下:
void MainWindow::slt_queryBtn()
QString queryStr = QObject::tr("time = '%1'").arg("2019-12-28 14:37:35.110");
model->setFilter(queryStr);
model->select();
点击query按钮的显示结果:
继续显示所有数据:
void MainWindow::slt_queryAllDataBtn()
model->setTable(tr("SOE记录"));
model->select();
void MainWindow::slt_sortAscBtn()
model->setSort(0,Qt::AscendingOrder);//按id升序排列,0是第1列
model->select();
降序:槽函数
void MainWindow::slt_sortDesBtn()
model->setSort(0, Qt::DescendingOrder);//按id降序排列,0是第1列
model->select();
6.删除操作
槽函数实现如下:
void MainWindow::slt_delBtn()
int row = tableview->currentIndex().row();
model->removeRow(row);
int ok = QMessageBox::warning(this, tr("删除当前行!"), tr("确定删除当前行吗"),
QMessageBox::Yes, QMessageBox::No);
if (ok == QMessageBox::No)
model->revertAll(); //如果不删除,则撤销
model->submitAll(); //否则提交,在数据库中删除该行
结果:删除第5行
7.插入操作
槽函数实现如下:
void MainWindow::slt_insertBtn()
int rowNum = model->rowCount(); //获得表的行数
int id = 5;
model->insertRow(rowNum); //添加一行
model->setData(model->index(rowNum, 0), id);
model->submitAll(); //可以直接提交
QSqlTableModel类为单个数据库表提供了一个可编辑的数据模型。QSqlTableModel是一个从单个表读取和写入数据库记录的高级接口。它构建在较低级别的QSqlQuery之上,并且可以用来提供数据给诸如QTableView的视图类(以查看数据)。1.在表格中查看QSqlite数据库中的数据例1:初始化实现一个表格;使用数据库中的哪个表格等信息在drawingTable中实现...
Qt实用技巧:使用QTableView、QSqlTableMode与QSqlDatabase对数据库数据进行操作
编写应用软件的过程中,需要对保存的数据进行动态的设置,当程序运行的时查询数据库获取相关配置项进行设置。
使用将QSqlTableModel与QSqlDatabase绑定即model与sql绑定,然后将model与QTabl
QSqlDatabase sqldb = QSqlDatabase::addDatabase("QMYSQL");
sqldb.setHostName("localhost");
sqldb.setDatabaseName("patient");
sqldb.setUserName("root");
sqldb.setPassword("123456");
if (!sqldb.open()) {
QMessageBo
void setTable(const QString &tableName) //设置数据表名称
void setFilter(const QString &filter) //设置记录过滤条件
void setSort(int column,Qt::SortOrder order) //设置排序字段和排序规则,需调用select()才生...
00. 目录
文章目录00. 目录01. 概述02. 开发环境03. QSqlTableModel基本操作04. QSqlTableModel修改操作05. QSqlTableModel查询操作06. QSqlTableModel排序操作07. QSqlTableModel删除操作08. QSqlTableModel插入操作09. QSqlTableModel总结10. 附录
01. 概述
只读的QSqlQueryModel模型其实也可以实现编辑功能的,但是实现起来很麻烦。而QSqlTableModel提供
QSqlTableModel的setFilter方法用于设置筛选条件,可以根据指定的条件过滤出符合条件的数据行。该方法的参数为一个字符串,可以使用SQL语句的WHERE子句来指定筛选条件。例如:
model.setFilter("age > 18");
这个例子中,设置了一个筛选条件,只显示age列大于18的数据行。
Efficient Route Planning on Public Transportation Networks: A Labelling Approach
qq_48782304:
QT 在开发项目中遇到的问题 动态库生成不了lib文件
20221001:
获取QTreeView的某一条目的所有数据
wit123rfrgb:
清理vmware 拖拽缓存
P_lang:
QHeaderView 设置列宽
大大毛丶aj: