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绑定即modelsql绑定,然后将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: C++里面的作用域花括号 域操作符 只要是访问花括号里面的内容 都是两个冒号,这个是枚举 enum QHeaderView { ... }