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设计原理。

