开学有课设的要求,大家都一顿网上源码download,有的出钱买,但是下载的有的调试不好,或者做的太牛批了不敢用,为了温习一下Qt,自己亲手写了一个,幸亏老师比较仁慈,作品比较low但也过了,在此做一下课设的总结。

一、编程语言

做数据库的可视化的话,很多语言都能做,我们的课程要求是JDBC,也就是java数据库,但是大多数的老师应该都允许使用自己熟悉或者喜欢的语言。

我周围的人课设用的语言如下:

  • Java
  • Qt
  • Python

1、java

Java做图形界面的话无疑需要使用swing,一个比较好的插件是windowbuilder,需要的可以自行安装,效果就是可以自行拖拽按钮等控件来对图形界面进行设计:

2、Qt

Qt是基于C++语言进行开发的,使用MinGW进行编译运行的,Qt 的项目有ui文件,也可以直接对需要使用的容器和控件等进行拖拽来进行图形界面的设计:

3、Python

Python图形界面可以使用pyQt,为什么叫pyqt呢,因为使用的模式和机制和qt的完全一样,应该说是用Python语言来实现Qt,需要安装模块pyqt5和pyqt5-tools,pyqt5-tools里面有designer可以对图形界面进行设计:
Qt和Java我都试过,但是作为以前使用c++比较多的情况下,感觉Qt更好用一点,也有朋友说Java难用,具体怎样可以去试试,总有一款适合自己。

二、作品效果

上传限制5M。。。弄了两个gif

三、遇到的问题及解决办法

1、去边框

做了一个登陆界面,但是一般的界面框都是有边框的,下面是一个最简单的界面:

想要的效果是把这个边框去掉,这样就变成了两个问题:

  • 去边框
  • 界面的拖拽移动(因为想要用鼠标移动界面需要拖动边框,去边框之后设置成无论拖拽哪里都可以移动界面)

解决方案:

//所需要的头文件要include
#include <QMouseEvent>
-------------------------------------------------------------------
//去边框
setWindowFlags(Qt::FramelessWindowHint);
//setAttribute(Qt::WA_TranslucentBackground);//背景透明    这个用不到,不用透明//拖拽:
void Widget::mouseMoveEvent(QMouseEvent *event)
{if (m_bPressed)move(event->pos() - m_point + pos());
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{Q_UNUSED(event);m_bPressed = false;
}void Widget::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton){m_bPressed = true;m_point = event->pos();}
}

2、窗口背景

用label也应该可以实现,但是label需要在最底层,而且上层控件的背景色都要是透明的,不是太方便,实现办法:

//需要的头文件
#include<QPalette>
#include <QPixmap>
------------------------------------------------
//QPalette是窗口的属性背景
QPixmap pImage3 = QPixmap(":/image/bglog.jpg").scaled(this->size());
QPalette tPalette3 = this->palette();
tPalette3.setBrush(QPalette::Background, QBrush(pImage3));
this->setPalette(tPalette3);

3、welcome界面

这个就是上面gif图片的达康书记,用了stackwidget容器来切换到welcome界面,设置了一个定时器来制定界面显示时间:

#include <QTimer>
---------------------------------------------------------
void Widget::loginBtn_start()
{//判断用户名和密码是否正确if(ui->nameEdit->text().trimmed() == tr("admin")&& ui->passwdEdit->text() == tr("123456")){ui->stackedWidget->setCurrentIndex(1);QPixmap pImage = QPixmap(":/image/king_meitu_1.jpg").scaled(this->size());QPalette tPalette = this->palette();tPalette.setBrush(QPalette::Background, QBrush(pImage));this->setPalette(tPalette);QTimer *timer = new QTimer(this);connect(timer, SIGNAL(timeout()), this, SLOT(MainRun()));timer->start(2000);   //设置时间为2s}else{QMessageBox::warning(this, tr("Waring"),tr("username or password error!"),QMessageBox::Yes);ui->nameEdit->clear();ui->passwdEdit->clear();ui->nameEdit->setFocus();}
}void Widget::MainRun()
{this->hide();MW.show();       //显示管理界面的窗口
}

4、连接数据库

#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
------------------------------------------------------
//打印支持的数据库驱动qDebug() << QSqlDatabase::drivers();dbcar = QSqlDatabase::addDatabase("QMYSQL");      //添加驱动dbcar.setHostName("localhost");dbcar.setUserName("root");dbcar.setPassword("root");dbcar.setDatabaseName("car");if(!dbcar.open())             //连接失败弹框{QMessageBox::warning(this, "error!", dbcar.lastError().text());return;}

5、数据库可视化实现

Qt提供了一种数据库的可视化模式:model-view模式,使用ui界面的Item Views里的table view来进行显示,使用model来存放数据库信息,然后把model放到view中就可以在ui中进行显示。

默认显示到view中的数据是可以直接修改并同步到数据库的。

#include <QSqlTableModel>
----------------------------------------------------------------------
TmodelOne->setTable("routeone");         //设置model关联的表
TmodelOne->setEditStrategy(QSqlTableModel::OnManualSubmit);  //设置修改方式为手动提交,也就是说不可以直接修改,需要进行确定操作ui->tableView->setModel(TmodelOne);  //把model放到view中
TmodelOne->select();                //显示全部数据
//currentModel = TmodelOne;     gif图中可见有许多的table需要显示,设置一个current来保存当前的model

6、增删改查操作

1)增加一行记录
#include <QSqlRecord>
---------------------------------------------------------
QSqlRecord record = currentModel->record();
int row = currentModel->rowCount();
currentModel->insertRecord(row, record);
2)删除记录(可以同时选中多条)
void MainWindow::on_ButtonDel_clicked()
{//获取选中的模型QItemSelectionModel *sModel =ui->tableView->selectionModel();//取出模型中的索引QModelIndexList list = sModel->selectedRows();//删除所有选中的行for(int i = 0; i < list.size(); i++){currentModel->removeRow( list.at(i).row() );}
}
3)修改记录

修改可以直接双击修改内容,不过因为策略问题需要进行提交(下面会提到),提交之后就能同步到数据库中。

4)查询记录
void MainWindow::on_ButtonQuery_clicked()
{QString duan = ui->lineEditduan->text();QString content = ui->lineEditContent->text();QString queryt = QString("%1 = '%2'").arg(duan, content);  //格式为name='Josephine'currentModel->setFilter(queryt);currentModel->select();
}
5)修改策略
//因为使用的策略是手动提交,所以要用了submitAll时候才会在数据库中同步修改
if(!currentModel->submitAll())QMessageBox::warning(this, "Error", dbcar.lastError().text());---------------------------------------------------------------------------
//修改或添加之后没有submitAll之前想撤销操作
void MainWindow::on_ButtonCancel_clicked()
{currentModel->revertAll();currentModel->submitAll();
}

四、小结

这一次是多个表,使用的是一个view,然后通过切换currentmodel来显示每个表对应的model的,一个model对应一个view,然后用stackwidget来通过不同的索引来显示每个view的话,好像会有问题:在stackwidget中的view不能进行修改,或者submitAll不成功等。
不知道是怎么回事,可能stackwidget会影响model-view模式吧。

总之作品还是比较简单的,Qt还是一个可以尝试的语言的。

数据库课程设计--公交车管理系统总结(Qt学习小结)相关推荐

  1. 教职工员工管理MySQL实训_数据库课程设计---教职工管理系统

    数据库课程设计---教职工管理系统 第 1 页目 录一.需求与功能分析 2二.系统总体框架 3三.功能设计 3四.类的设计与分析 4五.数据库表结构设计 4六.特色算法分析 5七.功能测试 6-10八 ...

  2. 宾馆客户管理系统数据库java_数据库课程设计+宾馆管理系统+Java+Sql

    [实例简介] 数据库课程设计+宾馆管理系统+Java+Sql [实例截图] [核心代码] elz76n └── 数据库课程设计 ├── sushe │   ├── build │   │   ├── ...

  3. mysql数据库课程设计机房管理系统_基于web的机房管理(完整源码+论文全套+教学视频)...

    实现一个web的机房管理, 也就是说可以基于浏览器来进行各种数据信息的管理功能, 也可以认为是一个B/S架构的机房管理的系统,系统分为前后台,实现了能够进行线上操作, 进行机房管理各项功能,实现了诸如 ...

  4. 数据库课程设计 人事管理系统

        一.JAVA与数据库的合作 此次开发语言为Java,所用的数据库驱动是mysql-connector-java-5.1.8-bin.jar 第一步   用Java连接MySQL数据库(驱动下载 ...

  5. 数据库课程设计-宿舍管理系统

    最近写完了数据库的课程设计,想把整个源码的编辑过程发出来.程序很简单,需要有很多完善的地方,在这里,我想和大家分享写这个程序的心路历程. 首先,在开始写程序之前.我们需要先写一些工具类,来辅助完成整个 ...

  6. 数据库课程设计-图书馆管理系统(3. 用户软件,基于QT)

    如果对你有帮助,可以给卑微的博主留个赞.关注.收藏   (不是) (骗一下数据,说不定以后面试就过了,拜谢) 用户软件的实现根据自己所用语言选择对应开发工具,c++ 较常用的是QT或者MFC.这里使用 ...

  7. 数据库课程设计-人事管理系统

    学期就要结束了,要完成一个数据库的课程设计项目,想想自己一个学期下来啥也没学到,现在突然要独立完成一个小项目,不能偷懒,记录一下吧. 第一天: 完成软件下载与环境配置,成功运行老师写好的学生管理系统. ...

  8. 数据库课程设计------书店管理系统

    书店会员管理系统 具体的效果图看博客-----书店管理系统2(https://blog.csdn.net/qq_45981397/article/details/124062654?spm=1001. ...

  9. 数据库课程设计-图书馆管理系统(1.数据库分析部分)

    图书馆管理系统第一部分,数据库分析. 主要是需求分析.设计概要模块.数据库概念结构设计(E-R图).数据库逻辑结构设计(表.存储过程.触发器) 目录 1. 需求分析 1.1 数据流图 1.2 数据字典 ...

最新文章

  1. 中科大影响超越清华北大
  2. CVPR2022最新106篇论文整理|包含目标检测、动作识别、图像处理等32个方向
  3. 聊聊flink的logback配置
  4. 23 | MySQL是怎么保证数据不丢的?
  5. 一位做了5年Java开发的读者,跟我说面试题都不会答···
  6. Solr基础,在Eclipse中运行Solr
  7. Linux中main和初启函数,main 中的 argv和argc 到底是个啥意思?
  8. 黄聪:Python初始化系统变量设置
  9. 硬件编解码与软件编解码的区别
  10. 聚类算法之密度聚类方法
  11. 如何用adb连接android手机
  12. 翻译: 欧洲伽利略卫星-全球导航卫星系统GNSS
  13. JAVA:实现求Median中位数算法(附完整源码)
  14. Linux内核4.14版本——alsa框架分析(3)-PCM设备的创建
  15. PT100热电阻接线方法
  16. 苹果,忘了发家的根本…
  17. 【2021】【论文笔记】红外及THz下的细胞膜生物效应——效应是现象,作用是机理——THz对医学的好处
  18. 第4阶段 Mysql数据库
  19. Ctf新生赛misc“easy_osint”
  20. 全球与中国氢化苯乙烯-异戊二烯嵌段共聚物市场现状及未来发展趋势

热门文章

  1. 《七堂极简物理课》总结
  2. 宜信:提升与反思——实习的意义并不止于其本身
  3. 基于oracle的餐馆评价系统,美团大众点评优化评价系统 助力餐饮商家做好口碑营销...
  4. permit doing 与permit to do详细区别
  5. 常用的几种时间系统GMT、UTC等以及使用Python代码GPS时间转UTC时间
  6. 从Folding@home项目看GPU通用计算发展
  7. 普通家电秒变智能,同为(TOWE)智能联动节能插排APZ-1014UMC3
  8. UE4 Windows环境下游戏打包基础教程(ios, windows, android)(UFE方式以及命令行方式)
  9. 基于深度学习的全色图像锐化(Pansharpening)论文及代码整理
  10. 宝塔linux面板和centOS的区别,关于 Linux Centos7 宝塔面板的问题