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