03.03 QT

1.在注册登录的练习里面,追加一个QListwidget 项目列表

要求:点击注册之后,将账号显示到 1istwidget上面去
以及,在listwidget中双击某个账号的时候,将该账号删除

Widget.h:

cpp 复制代码
#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:

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:

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界面:

相关推荐
明月看潮生1 小时前
青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理
开发语言·青少年编程·c#·编程与数学
你这个代码我看不懂1 小时前
Java项目OOM排查
java·开发语言
暴力求解1 小时前
C语言---动态内存管理、柔性数组
c语言·开发语言·算法
先做个垃圾出来………2 小时前
Python中使用pandas
开发语言·python·pandas
DanmF--2 小时前
C#面向对象实践项目--贪吃蛇
开发语言·游戏·c#·游戏程序
@老蝴2 小时前
C语言 — 动态内存管理
android·c语言·开发语言
虾球xz2 小时前
CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures
java·开发语言·c++·学习
小灰灰搞电子2 小时前
Qt 仪表盘源码分享
开发语言·qt
我的golang之路果然有问题3 小时前
快速了解GO+ElasticSearch
开发语言·经验分享·笔记·后端·elasticsearch·golang
凤年徐3 小时前
【数据结构初阶】顺序表的应用
c语言·开发语言·数据结构·c++·笔记·算法·顺序表