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

相关推荐
进击的编程浪人28 分钟前
c++中的vector
开发语言·c++·算法
Au_ust35 分钟前
React:Router路由
开发语言·javascript·react.js
懒麻蛇1 小时前
使用R包ellmer接入Deepseek
开发语言·后端·python·r语言·flask
_zwy1 小时前
【C++ 函数重载】—— 现代编译技术下的多态表达与性能优化
c语言·开发语言·汇编·c++
m0_748248651 小时前
Centos7搭建PHP项目,环境(Apache+PHP7.4+Mysql5.7)
开发语言·php·apache
Mac Zhu1 小时前
Kotlin中的数字
android·开发语言·kotlin
居然是阿宋1 小时前
Kotlin 内联函数与block.invoke()的妙用
android·开发语言·kotlin
不如打代码KK1 小时前
Java 泛型方法、通配符、上下限
java·开发语言
菜_小_白4 小时前
C++理解(六)
linux·开发语言·c++