1配置文件
说明: Qt可以使用qsql表模型进行数据库可视化操作,将mode/view与数据库结合使用。 本文主要介绍如何使用qsql表模型显示数据库。
mode/view你作为对象的可视化。 这里我们操作的对象是数据库。
2测试和说明
要使用的数据库中已经有一些数据。 数据库如下
用于Qt的Table View组件:
创建的接口如下:
可以使用“添加”、“删除”、“确认”、“取消”和“查找”按钮正确操作数据库。
首先,展示了运行测试的效果。
代码步骤说明:
(1)添加数据库、打开数据库和连接数据库
此过程直接显示代码,因为在上一个博客中介绍了它:
添加1//MySQL数据库
2 qsqldatabasedb=qsql数据库:3360 add数据库(' qmysql ); 3 //连接到数据库
4db.sethostname(127.0.0.1 ); //数据库服务器IP
5db.setusername('root ); //数据库用户名
6db.setpassword(123456 ); //密码
7db.setdatabasename('test ' ); //使用哪个数据库8 //打开数据库
9if(db.open(==false ) ) 10 qmessagebox 33603360 warning (this,'错误',db.lastError ).text ); 11返回; 12 }
)2)设置模型
1 //设定模型
2model=newQSQLtablemodel(this;
)3)指定使用哪个表
1 //指定使用哪个表
2型号安装(student );
)4)将模型放入视图中
1//model进入视图
2用户界面视图集模型(模型;
)5)显示mode数据
显示1//model的数据
2模型选择(;
)6)将mode的编辑模式设置为手动提交修改
设置1//model编辑模式并手动提交修改
2模型设置(qsql表模型: onmanualsubmit );
(七)增加
1 void构件:3360 on _ push button _ add _ clicked (2{3//添加空记录
4 qsql记录记录=model-record (; //获取空记录5 //获取行号
6 int row=模型- rowcount (; 7 //添加空行
8型号插入记录(row,record ); 9 }
(8)删除
1 void构件:3360 on _ push button _ delete _ clicked (2{3//获取所选模型
4 qitemselectionmodel * s模型=ui-table view-selection model (; 5 //从模型中提取索引
6 qmodelindexlistlist=s model -选定rows (; 7 //删除所有选定的行
8for(intI=0; i list.size (; I ({ 9模式移除行(list.at ) I ).row ); 10 }11 }
(9)确认
1 void构件:3360 on _ push button _ sure _ clicked (2{3//提交所有操作
4模型提交全部(; 5 }
(10 )取消
1 void构件:3360 on _ push button _ cancel _ clicked (2{3//删除所有操作
4型号- revert all (; 5 //提交所有动作
6模型提交全部(; 7 }
(11 )搜索
1 void构件:3360 on _ push button _ find _ clicked (在2 {3//name中搜索)
4 QString key=ui-lineEdit-text (; 5 QString
str = QString("name = '%1'").arg(key);6 //过滤条件7 model->setFilter(str);8 model->select();9 }
完整代码如下:
1 #include "widget.h"
2 #include "ui_widget.h"
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11
12 Widget::Widget(QWidget *parent) :13 QWidget(parent),14 ui(newUi::Widget)15 {16 ui->setupUi(this);17
18 //打印qt支持的数据库驱动
19 qDebug() <<:drivers>
21 //添加MySql数据库
22 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");23 //连接数据库
24 db.setHostName("127.0.0.1"); //数据库服务器IP
25 db.setUserName("root"); //数据库用户名
26 db.setPassword("123456"); //密码
27 db.setDatabaseName("test"); //使用哪个数据库28 //打开数据库
29 if (db.open() == false) {30 QMessageBox::warning(this, "错误", db.lastError().text());31 return;32 }33 //设置模型
34 model = new QSqlTableModel(this);35 //指定使用哪个表
36 model->setTable("student");37 //把model放置到view里面
38 ui->tableView->setModel(model);39 //显示model里的数据
40 model->select();41
42 //model->setHeaderData(0, Qt::Horizontal, "学号");43
44 //设置model的编辑模式,手动提交修改
45 model->setEditStrategy(QSqlTableModel::OnManualSubmit);46 //设置数据库不允许修改47 //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
48 }49
50 Widget::~Widget()51 {52 deleteui;53 }54
55 voidWidget::on_pushButton_add_clicked()56 {57 //添加空记录
58 QSqlRecord record = model->record(); //获取空记录59 //获取行号
60 int row = model->rowCount();61 //添加空行
62 model->insertRecord(row, record);63 }64
65 voidWidget::on_pushButton_delete_clicked()66 {67 //获取选中的模型
68 QItemSelectionModel *sModel = ui->tableView->selectionModel();69 //取出模型中的索引
70 QModelIndexList list = sModel->selectedRows();71 //删除所有选中的行
72 for (int i = 0; i < list.size(); i++) {73 model->removeRow(list.at(i).row());74 }75 }76
77 voidWidget::on_pushButton_sure_clicked()78 {79 //提交所有动作
80 model->submitAll();81 }82
83 voidWidget::on_pushButton_cancel_clicked()84 {85 //取下所有动作
86 model->revertAll();87 //提交所有动作
88 model->submitAll();89 }90
91 voidWidget::on_pushButton_find_clicked()92 {93 //以name进行查找
94 QString key = ui->lineEdit->text();95 QString str = QString("name = '%1'").arg(key);96 //过滤条件
97 model->setFilter(str);98 model->select();99 }
View Code