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

03.03 QT

1.在注册登录的练习里面,追加一个QListwidget 项目列表
要求:点击注册之后,将账号显示到 1istwidget上面去
以及,在listwidget中双击某个账号的时候,将该账号删除

Widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFile>
#include <QListWidget>

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_pushButton_clicked();

    void on_listWidget_itemDoubleClicked(QListWidgetItem *item);

private:
    Ui::Widget *ui;
    QFile file;
};
#endif // WIDGET_H

Widget.cpp:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QString name = load_data("D:/QT/project/111/day2/name.txt");
    ui->lineEdit->setText(name);

    QString ischecked = load_data("D:/QT/project/111/day2/ischecked.txt");
    if(ischecked == "1"){
        ui->checkBox->setChecked(1);
    }
    if(ui->checkBox->isChecked()){
        QString pswd = load_data("D:/QT/project/111/day2/pswd.txt");
        ui->lineEdit_2->setText(pswd);
    }
    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::on_pushButton_clicked);
}

Widget::~Widget()
{
    QString name = ui->lineEdit->text();
    QString pswd = ui->lineEdit_2->text();
    save_data("D:/QT/project/111/day2/name.txt",name);
    save_data("D:/QT/project/111/day2/pswd.txt",pswd);

    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);

    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)
{
    //参数state为勾选框状态改变后的当前状态
    //0表示未勾选状态,2表示勾选状态
    if(state == 0){
        save_data("D:/QT/project/111/day2/ischecked.txt","0");
    }else if(state == 2){
        save_data("D:/QT/project/111/day2/ischecked.txt","1");
    }
}


void Widget::on_pushButton_clicked()
{
    QString account = ui->lineEdit->text();
       if (!account.isEmpty()) {
           // 检查 QListWidget 中是否已经存在相同的账号
           QList<QListWidgetItem *> items = ui->listWidget->findItems(account, Qt::MatchExactly);

           if (items.isEmpty()) { // 如果账号不存在
               QListWidgetItem *item = new QListWidgetItem(account);
               ui->listWidget->addItem(item);
           }
       }
}

void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    delete  ui->listWidget->takeItem(ui->listWidget->row(item));
}

main.cpp:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

2.完成一个计算器,完成 +-*/计算功能并且在对应位置显示对应的数据

UI界面:


http://www.kler.cn/a/570656.html

相关文章:

  • 如何本地部署大模型及性能优化指南(附避坑要点)
  • AI预测福彩3D新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月3日第11弹
  • WordPress ltl-freight-quotes-estes-edition sql注入漏洞(CVE-2024-13479)
  • Linux虚拟机网络配置-桥接网络配置
  • 【向量数据库Weaviate】与ChromaDB的差异、优劣
  • 刚安装docker并启动docker服务: systemctl restart docker报错解决
  • [RN]React Native知识框架图详解
  • Golang的图形用户界面设计
  • python爬虫Scapy框架(1)
  • 分布式中间件:Redis介绍
  • 蓝桥杯 - 每日打卡(类斐波那契循环数)
  • 国产编辑器EverEdit - 超多样式设置
  • 深入解析 Rust 异步编程中的 Traits
  • 计算机毕业设计SpringBoot+Vue.js医院后台管理系统(源码+文档+PPT+讲解)
  • 【Elasticsearch】Data Streams
  • 03 HarmonyOS Next仪表盘案例详解(二):进阶篇
  • 【三.大模型实战应用篇】【6.自然语言转SQL:AI与数据库的无缝对接】
  • doris: Hive Catalog
  • 基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)
  • unity pico开发 五 UI交互