当前位置:实例文章 » 其他实例» [文章]7.26 作业 QT

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

其他信息

其他资源

Top