基于Qt的登陆界面设计及记住密码,简易计算器设计
- 游戏开发
- 2025-09-13 02:45:01

题目1:Qt 实现用户登录界面及记住密码功能
要求:
1、用户登录界面包括用户名和密码输入框,密码框支持显示和隐藏密码。 2、支持记住密码功能,通过复选框保存用户是否选择记住密码。 3、在退出时保存用户的登录信息(如用户名和密码),并支持加载这些信息。 4、支持管理用户的账号列表,通过双击列表项删除用户,检查用户名是否重复并添加新账号。
widget.cpp #include "widget.h" #include "ui_widget.h" // 构造函数 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { // 设置 UI 界面 ui->setupUi(this); // 加载用户名,并填充到文本框 QString name = load_data("C:/Users/80657/Documents/QT_PROJECT/name.txt"); ui->lineEdit->setText(name); // 加载密码,并填充到密码框 QString pwd = load_data("C:/Users/80657/Documents/QT_PROJECT/pwd.txt"); ui->lineEdit_2->setText(pwd); // 判断是否选中了“记住密码” QString rememberPwd = load_data("C:/Users/80657/Documents/QT_PROJECT/rememberPwd.txt"); if (rememberPwd == "true") { // 如果记住密码 ui->checkBox->setChecked(true); // 复选框设为选中 } else { // 如果不记住密码 ui->checkBox->setChecked(false); // 复选框设为未选中 ui->lineEdit_2->clear(); // 清空密码输入框 } } // 析构函数 Widget::~Widget() { // 获取用户名,并保存到文件 QString name = ui->lineEdit->text(); save_data("C:/Users/80657/Documents/QT_PROJECT/name.txt", name); // 获取密码,并保存到文件(暂未启用) QString pwd = ui->lineEdit_2->text(); save_data("C:/Users/80657/Documents/QT_PROJECT/pwd.txt", pwd); /* 这里的代码被注释掉了,实际逻辑如下: 如果勾选“记住密码”,则保存密码,否则清空密码文件 if (ui->checkBox->isChecked()) { QString pwd = ui->lineEdit_2->text(); save_data("C:/Users/80657/Documents/QT_PROJECT/pwd.txt", pwd); save_data("C:/Users/80657/Documents/QT_PROJECT/rememberPwd.txt", "true"); } else { save_data("C:/Users/80657/Documents/QT_PROJECT/pwd.txt", ""); // 清空密码 save_data("C:/Users/80657/Documents/QT_PROJECT/rememberPwd.txt", "false"); } */ // 释放 UI 资源 delete ui; } // 保存数据到指定文件 void Widget::save_data(const QString& filename, const QString& data) { file.setFileName(filename); // 设置文件路径 file.open(QFile::WriteOnly); // 以写入模式打开文件 file.write(data.toLocal8Bit()); // 写入数据 file.close(); // 关闭文件 } // 从指定文件加载数据 QString Widget::load_data(const QString &filename) { file.setFileName(filename); // 设置文件路径 file.open(QFile::ReadOnly); // 以只读模式打开文件 QByteArray arr = file.readAll(); // 读取所有数据 QString str = QString::fromLocal8Bit(arr); // 转换为 QString file.close(); // 关闭文件 return str; // 返回数据 } // 监听用户名输入框内容变化 void Widget::on_lineEdit_textChanged(const QString &arg1) { QString name = ui->lineEdit->text(); // 获取用户名输入框内容 QString pswd = ui->lineEdit_2->text(); // 获取密码输入框内容 if (name.isEmpty() || pswd.isEmpty()) { // 如果用户名或密码为空 ui->pushButton->setEnabled(0); // 禁用账号按钮 ui->pushButton_2->setEnabled(0); // 禁用密码按钮 } else { // 否则 ui->pushButton->setEnabled(1); // 启用账号按钮 ui->pushButton_2->setEnabled(1); // 启用密码按钮 } } // 监听密码输入框内容变化 void Widget::on_lineEdit_2_textChanged(const QString &arg1) { QString name = ui->lineEdit->text(); // 获取用户名输入框内容 QString pswd = ui->lineEdit_2->text(); // 获取密码输入框内容 if (name.isEmpty() || pswd.isEmpty()) { // 如果用户名或密码为空 ui->pushButton->setEnabled(0); // 禁用账号按钮 ui->pushButton_2->setEnabled(0); // 禁用密码按钮 } else { // 否则 ui->pushButton->setEnabled(1); // 启用账号按钮 ui->pushButton_2->setEnabled(1); // 启用密码按钮 } } // 按下“显示密码”按钮时,密码框显示明文 void Widget::on_pushButton_3_pressed() { ui->lineEdit_2->setEchoMode(QLineEdit::Normal); // 设置密码框为明文显示 } // 释放“显示密码”按钮时,密码框恢复为密文 void Widget::on_pushButton_3_released() { ui->lineEdit_2->setEchoMode(QLineEdit::Password); // 设置密码框为密文显示 } // 监听“记住密码”复选框状态变化 void Widget::on_checkBox_stateChanged(int state) { if (state == Qt::Checked) { // 如果复选框被选中 save_data("C:/Users/80657/Documents/QT_PROJECT/rememberPwd.txt", "true"); // 记录记住密码状态 } else { // 如果复选框未选中 save_data("C:/Users/80657/Documents/QT_PROJECT/rememberPwd.txt", "false"); // 记录不记住密码状态 save_data("C:/Users/80657/Documents/QT_PROJECT/pwd.txt", ""); // 清空密码 } } void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item) { // 获取选中的账号(用户名) QString selectedAccount = item->text(); // 在列表中删除选中的账号 delete item; } void Widget::on_pushButton_clicked() { // 获取用户输入的用户名 QString newUsername = ui->lineEdit->text(); // 判断用户名是否为空 if (newUsername.isEmpty()) { // 提示用户输入有效的用户名(可选) // QMessageBox::warning(this, "输入错误", "用户名不能为空!"); return; } // 检查该用户名是否已经存在于列表中 bool exists = false; for (int i = 0; i < ui->listWidget->count(); ++i) { if (ui->listWidget->item(i)->text() == newUsername) { exists = true; // 如果找到重复的账号,则标记为存在 break; } } // 如果该账号不存在,则添加到列表中 if (!exists) { ui->listWidget->addItem(newUsername); // 添加到列表 } //else { // 如果账号已经存在,提示用户(可选) // QMessageBox::information(this, "重复账号", "该账号已存在,请选择其他用户名!"); //} }
widget.h头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QFile> #include <QListWidget> #include <QApplication> #include <QDebug> #include <QLabel> #include <QLineEdit> #include <QTextEdit> #include <QPushButton> #include <QWidget> // 基础窗口类 #include <QVBoxLayout> #include <QDesktopWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); void save_data(const QString& filename,const QString& data); QString load_data(const QString& filename); private slots: void on_lineEdit_textChanged(const QString &arg1); void on_lineEdit_2_textChanged(const QString &arg1); void on_pushButton_3_pressed(); void on_pushButton_3_released(); void on_checkBox_stateChanged(int arg1); void on_listWidget_itemDoubleClicked(QListWidgetItem *item); void on_pushButton_clicked(); private: Ui::Widget *ui; QFile file; }; #endif // WIDGET_H //main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); } login.pro QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ widget.cpp HEADERS += \ widget.h FORMS += \ widget.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target 题目2: 简易计算器设计
基于Qt的登陆界面设计及记住密码,简易计算器设计由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“基于Qt的登陆界面设计及记住密码,简易计算器设计”