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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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界面: