Qt之数据库的使用一

devtools/2025/2/3 17:38:17/

qt creator6.8

主要功能从数据库中读取数据,使用tableView进行显示。

qt框架中包含m/v结构  m指的是model(模型),v指的是view(视图)。这样可以使界面和数据分离开来。每当数据更新时,不会影响界面组件。

软件运行界面如下

程序分析window.h部分程序

private:QSqlDatabase DB;//数据库连接QSqlTableModel *tabModel;//数据模型QItemSelectionModel *selectModel;//选择模型QDataWidgetMapper *dataMapper;//数据映射TComboBoxDelegate delegateSex;//自定义数据代理 性别TComboBoxDelegate delegateDepart;//自定义数据代理 部门void openTable();void showRecordCount();

数显设置和数据库连接

void MainWindow::on_actOpenDB_triggered()
{QString aFile=QFileDialog::getOpenFileName(this,"选择文件","","QSLite数据库(*.db3)");if(aFile.isEmpty())return;DB=QSqlDatabase::addDatabase("QSQLITE");DB.setDatabaseName(aFile);if(DB.open())openTable();elseQMessageBox::warning(this,"错误","打开数据库失败");
}

数据库连接成功,数据读取后在tableview中和当前记录组件展示(tableView中性别和部门使用了代理类)。

void MainWindow::openTable()
{tabModel =new QSqlTableModel(this,DB);//数据模型tabModel ->setTable("employee");//设置数据表tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);tabModel->setSort(tabModel->fieldIndex("empNo"),Qt::AscendingOrder);if(!(tabModel->select())){QMessageBox::critical(this,"错误信息","打开数据表错误,错误信息:\n"+tabModel->lastError().text());return;}showRecordCount();//显示记录条数//设置字段显示标题tabModel->setHeaderData(tabModel->fieldIndex("empNo"),Qt::Horizontal,"工号");tabModel->setHeaderData(tabModel->fieldIndex("Name"),Qt::Horizontal,"姓名");tabModel->setHeaderData(tabModel->fieldIndex("Gender"),Qt::Horizontal,"性别");tabModel->setHeaderData(tabModel->fieldIndex("Birthday"),Qt::Horizontal,"出生日期");tabModel->setHeaderData(tabModel->fieldIndex("Province"),Qt::Horizontal,"省份");tabModel->setHeaderData(tabModel->fieldIndex("Department"),Qt::Horizontal,"部门");tabModel->setHeaderData(tabModel->fieldIndex("Salary"),Qt::Horizontal,"工资");tabModel->setHeaderData(tabModel->fieldIndex("Memo"),Qt::Horizontal,"备注");tabModel->setHeaderData(tabModel->fieldIndex("Photo"),Qt::Horizontal,"照片");//创建选择模型selectModel=new QItemSelectionModel(tabModel,this);//行发生变化时connect(selectModel,&QItemSelectionModel::currentChanged,this,&MainWindow::do_currentChanged);connect(selectModel,&QItemSelectionModel::currentRowChanged,this,&MainWindow::do_currentRowChanged);//model/View 结构ui->tableView->setModel(tabModel);//设置数据模型ui->tableView->setSelectionModel(selectModel);//设置选择模型ui->tableView->setColumnHidden(tabModel->fieldIndex("Memo"),true);ui->tableView->setColumnHidden(tabModel->fieldIndex("Photo"),true);//为tableView中的性别和部门两个字段设置自定义代理组件QStringList strList;strList<<"男"<<"女";delegateSex.setItem(strList,false);ui->tableView->setItemDelegateForColumn(tabModel->fieldIndex("Gender"),&delegateSex);strList.clear();strList<<"技术部"<<"销售部"<<"市场部";delegateDepart.setItem(strList,false);ui->tableView->setItemDelegateForColumn(tabModel->fieldIndex("Department"),&delegateDepart);//字段与widget映射dataMapper=new QDataWidgetMapper(this);dataMapper->setModel(tabModel);dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);dataMapper->addMapping(ui->spinBoxEmpNo,tabModel->fieldIndex("empNo"));dataMapper->addMapping(ui->lineEditName,tabModel->fieldIndex("Name"));dataMapper->addMapping(ui->comboBoxSex,tabModel->fieldIndex("Gender"));dataMapper->addMapping(ui->dateTimeEditBirth,tabModel->fieldIndex("Birthday"));dataMapper->addMapping(ui->comboBoxProvince,tabModel->fieldIndex("Province"));dataMapper->addMapping(ui->spinBoxSalary,tabModel->fieldIndex("Salary"));dataMapper->addMapping(ui->comboBoxDep,tabModel->fieldIndex("Department"));dataMapper->addMapping(ui->plainTextEdit,tabModel->fieldIndex("Memo"));dataMapper->toFirst();ui->actOpenDB->setEnabled(false);ui->actAppend->setEnabled(true);ui->actInsert->setEnabled(true);ui->actDelete->setEnabled(true);ui->actSave->setEnabled(true);ui->groupBoxSort->setEnabled(true);ui->groupBoxFilter->setEnabled(true);ui->actAddMoney->setEnabled(true);QSqlRecord emptyRec=tabModel->record();for(int i=0;i<emptyRec.count();i++){ui->comboBoxFiles->addItem(emptyRec.fieldName(i));}
}

欢迎大家一起交流。


http://www.ppmy.cn/devtools/155784.html

相关文章

/etc/shadow配置文件的一些符号意义说明

* 该用户永久性不能登录系统 ! 账号锁定 !! 密码锁定 图例&#xff1a; &#xff08;如何进行账户锁定和密码锁定&#xff1a;账户锁定与密码锁定以及解锁-CSDN博客&#xff09;

L1-006 连续因子*

1.题意 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff0c;其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N&#xff0c;要求编写程序求出最长连续因子的个数&#xff0c;并输出最小的连续因子序列。 这两句话非常重要也非常难理解&…

使用 PyTorch 实现逻辑回归:从数据到模型保存与加载

在机器学习中&#xff0c;逻辑回归是一种经典的分类算法&#xff0c;广泛应用于二分类问题。本文将通过一个简单的示例&#xff0c;展示如何使用 PyTorch 框架实现逻辑回归模型&#xff0c;从数据准备到模型训练、保存和加载&#xff0c;最后进行预测。 1. 数据准备 逻辑回归…

centos7 配置国内镜像源安装 docker

使用国内镜像源&#xff1a;由于 Docker 的官方源在国内访问可能不稳定&#xff0c;你可以使用国内的镜像源&#xff0c;如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件&#xff0c;并添加以下内容&#xff1a; [docker-ce-stable] nameDocker CE Stable -…

数据库性能优化(sql优化)_SQL执行计划03_yxy

数据库性能优化_SQL执行计划详解03 1 排序、聚集类操作符1.1 SORT 排序1.2 聚集AAGR 简单聚集FAGR 快速聚集HAGR HASH分组聚集SAGR 流分组聚集1.3 排序、聚集类操作符总结2 执行计划读取技巧1 排序、聚集类操作符 1.1 SORT 排序 它的主要功能是按照指定的列(或列组合)以及排…

网站结构优化:加速搜索引擎收录的关键

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/9.html 网站结构优化对于加速搜索引擎收录至关重要。以下是一些关键策略&#xff0c;旨在通过优化网站结构来提高搜索引擎的抓取效率和收录速度&#xff1a; 一、合理规划网站架构 采用扁…

CSS Display属性完全指南

CSS Display属性完全指南 引言核心概念常用display值详解1. block&#xff08;块级元素&#xff09;2. inline&#xff08;行内元素&#xff09;3. inline-block&#xff08;行内块级元素&#xff09;4. flex&#xff08;弹性布局&#xff09;5. grid&#xff08;网格布局&…

B-树:解锁大数据存储和与快速存储的密码

在我们学习数据结构的过程中&#xff0c;我们会学习到二叉搜索树、二叉平衡树、红黑树。 这些无一例外&#xff0c;是以一个二叉树展开的&#xff0c;那么对于我们寻找其中存在树中的数据&#xff0c;这个也是一个不错的方法。 但是&#xff0c;如若是遇到了非常大的数据容量…