日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2023/12/15 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库课程设计--公交车管理系统总结(Qt学习小结) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開學有課設的要求,大家都一頓網上源碼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学习小结)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。