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