当前位置: 首页 > news >正文

基于Qt的登陆界面设计及记住密码,简易计算器设计

题目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:  简易计算器设计 

 

 

相关文章:

  • Linux网络_应用层自定义协议与序列化_守护进程
  • 二、QT和驱动模块实现智能家居-----5、通过QT控制LED
  • Python 课堂点名桌面小程序
  • spark 虚拟机基本命令(2)
  • 深入解析Java虚拟机(JVM)的核心组成
  • 2025-03-03 学习记录--C/C++-PTA 7-38 数列求和-加强版
  • 探索Elasticsearch:索引的CRUD
  • DeepSeek系列 清华大学-AIGC发展研究3.0版 pdf完整版(附下载)
  • Qt:day1
  • 聆听PostgreSQL数据库的使用
  • 【音视频】视频基本概念
  • 27、Java 反射机制
  • LeetCode 225. 用队列实现栈 java题解
  • 《2025软件测试工程师面试》性能测试面试篇
  • C++知识整理day10——多态(多态的定义和实现、虚函数重写/覆盖、override和final关键字、纯虚函数和抽象类、多态的原理)
  • macOS skhd+ yabai
  • 动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南
  • 标签的ref属性 vue中为什么不用id标记标签
  • RTC、直播、点播技术对比|腾讯云/即构/声网如何选型 — 2025 版
  • centos虚拟机安装
  • 国际奥委会举办研讨会,聚焦如何杜绝操纵比赛
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 5吨煤炭“瞬间蒸发”?掺水炭致企业损失千万,腐败窝案曝光
  • 受贿3501万余元,中石油原董事长王宜林一审被判13年
  • 中国创面修复学科发起者之一陆树良教授病逝,享年64岁