7.26 作业 QT
发布人:shili8
发布时间:2025-03-14 01:02
阅读次数:0
**QT项目作业**
### 一、前言本次作业要求完成一个基于QT的图形用户界面应用程序。该程序将实现以下功能:
* 用户登录* 用户注册* 数据库管理(使用SQLite)
* 数据显示和编辑### 二、环境设置* QT版本:5.15.2* 编译器:g++ (GNU C++ Compiler)
* IDE:QT Creator* 操作系统:Windows10### 三、项目结构
bashqt_project/ |---- src/ | |---- main.cpp| |---- login.ui| |---- register.ui| |---- database.cpp| |---- data_model.h| |---- data_model.cpp|---- ui/ | |---- login.ui| |---- register.ui|---- qrc_resources.qrc|---- qt_project.pro
### 四、登录界面####4.1 登录界面的设计
cpp// src/login.uiUI_Login::setupUi(Login); Login->setWindowTitle(tr("Login")); Login->resize(300,200); QLabel *label = new QLabel(Login); label->setText(tr("Username:")); label->move(10,20); QLineEdit *lineEdit = new QLineEdit(Login); lineEdit->move(100,20); QLabel *label_2 = new QLabel(Login); label_2->setText(tr("Password:")); label_2->move(10,60); QLineEdit *lineEdit_2 = new QLineEdit(Login); lineEdit_2->move(100,60); QPushButton *pushButton = new QPushButton(Login); pushButton->setText(tr("Login")); pushButton->move(150,120); connect(pushButton, &QPushButton::clicked, this, &Login::on_pushButton_clicked);
####4.2 登录界面的逻辑
cpp// src/main.cppint main(int argc, char *argv[]) { QApplication a(argc, argv); Login login; login.show(); return a.exec(); } void Login::on_pushButton_clicked() { QString username = ui->lineEdit->text(); QString password = ui->lineEdit_2->text(); // 验证用户名和密码 if (username == "admin" && password == "123456") { QMessageBox::information(this, tr("Login"), tr("Welcome!")); } else { QMessageBox::critical(this, tr("Error"), tr("Invalid username or password.")); } }
### 五、注册界面####5.1 注册界面的设计
cpp// src/register.uiUI_Register::setupUi(Register); Register->setWindowTitle(tr("Register")); Register->resize(300,200); QLabel *label = new QLabel(Register); label->setText(tr("Username:")); label->move(10,20); QLineEdit *lineEdit = new QLineEdit(Register); lineEdit->move(100,20); QLabel *label_2 = new QLabel(Register); label_2->setText(tr("Password:")); label_2->move(10,60); QLineEdit *lineEdit_2 = new QLineEdit(Register); lineEdit_2->move(100,60); QPushButton *pushButton = new QPushButton(Register); pushButton->setText(tr("Register")); pushButton->move(150,120); connect(pushButton, &QPushButton::clicked, this, &Register::on_pushButton_clicked);
####5.2 注册界面的逻辑
cpp// src/main.cppvoid Register::on_pushButton_clicked() { QString username = ui->lineEdit->text(); QString password = ui->lineEdit_2->text(); // 验证用户名和密码 if (username == "admin" && password == "123456") { QMessageBox::information(this, tr("Register"), tr("Welcome!")); } else { QMessageBox::critical(this, tr("Error"), tr("Invalid username or password.")); } }
### 六、数据库管理####6.1 数据库设计
cpp// src/database.cpp#include#include void Database::init() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("qt_project.db"); if (!db.open()) { QMessageBox::critical(this, tr("Error"), tr("Failed to open database.")); } } bool Database::insert(const QString &username, const QString &password) { QSqlQuery query; query.prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); query.bindValue(":username", username); query.bindValue(":password", password); return query.exec(); }
####6.2 数据库逻辑
cpp// src/main.cppvoid Database::on_pushButton_clicked() { QString username = ui->lineEdit->text(); QString password = ui->lineEdit_2->text(); // 验证用户名和密码 if (username == "admin" && password == "123456") { QMessageBox::information(this, tr("Login"), tr("Welcome!")); } else { QMessageBox::critical(this, tr("Error"), tr("Invalid username or password.")); } }
### 七、数据显示和编辑####7.1 数据显示设计
cpp// src/data_model.hclass DataModel : public QObject { Q_OBJECTpublic: explicit DataModel(QObject *parent = nullptr); signals: public slots: void showData(); };
####7.2 数据显示逻辑
cpp// src/data_model.cpp#include "data_model.h" #include#include DataModel::DataModel(QObject *parent) : QObject(parent) { init(); } void DataModel::init() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("qt_project.db"); if (!db.open()) { QMessageBox::critical(this, tr("Error"), tr("Failed to open database.")); } } void DataModel::showData() { QSqlQuery query; query.prepare("SELECT * FROM users"); query.exec(); while (query.next()) { QString username = query.value(1).toString(); QString password = query.value(2).toString(); // 显示数据 QMessageBox::information(this, tr("Data"), tr("Username: ") + username + ", Password: " + password); } }
####7.3 数据编辑设计
cpp// src/data_model.hclass DataModel : public QObject { Q_OBJECTpublic: explicit DataModel(QObject *parent = nullptr); signals: public slots: void editData(); };
####7.4 数据编辑逻辑
cpp// src/data_model.cpp#include "data_model.h" #include#include DataModel::DataModel(QObject *parent) : QObject(parent) { init(); } void DataModel::init() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("qt_project.db"); if (!db.open()) { QMessageBox::critical(this, tr("Error"), tr("Failed to open database.")); } } void DataModel::editData() { QString username = ui->lineEdit->text(); QString password = ui->lineEdit_2->text(); // 编辑数据 QSqlQuery query; query.prepare("UPDATE users SET username = :username, password = :password WHERE id =1"); query.bindValue(":username", username); query.bindValue(":password", password); if (query.exec()) { QMessageBox::information(this, tr("Edit"), tr("Data edited successfully.")); } else { QMessageBox::critical(this, tr("Error"), tr("Failed to edit data.")); } }
### 八、总结本次作业完成了一个基于QT的图形用户界面应用程序。该程序实现了用户登录、注册、数据库管理和数据显示与编辑功能。通过此项目,学习者可以掌握QT的基本使用方法和GUI设计原理。