QT中使用sql模型类
来源:互联网 发布:mvc,return json(obj) 编辑:程序博客网 时间:2024/06/05 18:42
QT提供了三个高级的类来访问数据库,分别是QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel。这三个类可以很容易的实现将数据库中的数据在QListView和QTableView等视图类中显示;也可以是编写的代码很容易地适应其他数据源。下面用实例说明。
新建GUI应用,项目名称为sqlModel,基类为QMainwindow。打开.pro文件,添加代码:
QT+=sql打开.ui文件,向窗口中拖入label、PushButton、Line Edit和Table View部件,效果如图:
添加头文件connection.h,实现数据库的连接,代码如下:
#ifndef CONNECTION_H#define CONNECTION_H#include <QMessageBox>#include <QSqlDatabase>#include <QSqlQuery>static bool createConnection(){ QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("my.db"); if(!db.open()) { QMessageBox::critical(0,"Cannot open database1","Unable to establish a database connection.",QMessageBox::Cancel); return false; } QSqlQuery query; //创建student表 query.exec(QString("create table student(id int primary key,name varchar,course int)")); query.exec(QString("insert into student value(1,'李强',11)")); query.exec(QString("insert into student value(2,'马亮',11)")); query.exec(QString("insert into student value(3,'孙红',12)")); //创建course表 query.exec(QString("create table course(id int primary key,name varchar,teacher varchar)")); query.exec(QString("insert into course value(10,'数学','王老师')")); query.exec(QString("insert into course value(11,'英语','张老师')")); query.exec(QString("insert into course value(12,'计算机','白老师')")); return true;}#endif // CONNECTION_H
更改main.cpp文件,代码如下:
#include "mainwindow.h"#include <QApplication>#include "connection.h"#include <QTextCodec>int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); if(!createConnection()) return 1; MainWindow w; w.show(); return a.exec();}
在mainwindow.h文件中,添加类的前置声明:
class QSqlTableModel;
燃耗定义一个私有对象:
QSqlTableModel *model;
下面实现各个功能。进入各个功能的单击信号槽,添加代码,代码如下:
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QSqlQueryModel>#include <QSqlTableModel>#include <QSqlRelationalTableModel>#include <QTableView>#include <QDebug>#include <QMessageBox>#include <QSqlError>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); model = new QSqlTableModel(this); model->setTable("student"); model->select(); // 设置编辑策略 model->setEditStrategy(QSqlTableModel::OnManualSubmit); ui->tableView->setModel(model);}MainWindow::~MainWindow(){ delete ui;}//提交按钮void MainWindow::on_pushButton_clicked(){ //开始事务操作 model->database().transaction(); if(model->submitAll()) { model->database().commit();//提交 } else { model->database().rollback();//回滚 QMessageBox::warning(this,tr("tableModel"),tr("数据库错误:%1").arg(model->lastError().text())); }}//撤销按钮void MainWindow::on_pushButton_2_clicked(){ model->revertAll();}//查询void MainWindow::on_pushButton_7_clicked(){ QString name=ui->lineEdit->text(); //根据姓名进行筛选,一定要使用单引号 model->setFilter(QString("name='%1'").arg(name)); model->select();}//显示全表按钮void MainWindow::on_pushButton_8_clicked(){ model->setTable("student"); model->select();}//按id升序排列void MainWindow::on_pushButton_5_clicked(){ //id字段,即第0列,升序排列 model->setSort(0,Qt::AscendingOrder); model->select();}//按id降序排列void MainWindow::on_pushButton_6_clicked(){ model->setSort(0,Qt::DescendingOrder); model->select();}//删除void MainWindow::on_pushButton_4_clicked(){ //获取选中行 int curRow=ui->tableView->currentIndex().row(); //删除该行 model->removeRow(curRow); int ok=QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"),QMessageBox::Yes,QMessageBox::No); if(ok==QMessageBox::No) { model->revertAll();//如果不删除,泽撤销 } else { //否则提交,在数据库中删除该行 model->submitAll(); }}//添加记录void MainWindow::on_pushButton_3_clicked(){ //获取表的行数 int rowNum=model->rowCount(); int id=10; //添加一行 model->insertRow(rowNum); model->setData(model->index(rowNum,0),id); //可以直接提交 model->submitAll();}
运行程序,即可实现各功能。
- QT中使用sql模型类
- Qt中 抽象列表模型类 的使用
- QT:数据库总结(三)之SQL模型类-QSqlTableModel模型
- 关于Qt使用SQL模型类数据修改后不能写入数据库的问题
- Qt中Qtableview 的使用2(QStandardItemModel模型)
- Qt中Qtableview的使用1(QSqlTableModel模型)
- Qt中模型/视图结构
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
- QT笔记:数据库总结(四)之SQL模型类-QSqlRelationalTableModel模型
- QT笔记:数据库总结(四)之SQL模型类-QSqlRelationalTableModel模型
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型 .
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- QT笔记:数据库总结(三)之SQL模型类-QSqlTableModel模型
- QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型
- Chapater10-15 P321 标准化考试
- SSL与SSH
- TCP/IP Illustrated学习笔记(1)
- android robotium获取相同id的的控件
- java throw和throws的区别及用法
- QT中使用sql模型类
- Documentation/cpu-freq/boost.txt
- android - Animation详解
- 后台管理界面,使用a标签配合iframe实现动态局部刷新
- 从servlet中传递到jsp中对象的变量的类型
- Chapater10 P321 标准化考试
- oracle之序列
- 一步一步学android控件(之十五) —— DegitalClock & AnalogClock
- JSP+Servlet+tomcat6.0+mysql中查询英文正常,但是中文查不出结果也不报错