QT-信号与槽
1.在注册登录的练习里面,追加一个QListWidget项目列表
要求:点击注册之后,将账号显示到列表窗口小部件上面去
以及,在列表窗口小部件中双击某个账号的时候,将该账号删除
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QListWidgetItem>
#include <QWidget>
#include <QFile>
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);//从filename文件中加载数据并以返回值返回
private slots:
void on_lineEdit_2_textChanged(const QString &arg1);
void on_lineEdit_textChanged(const QString &arg1);
void on_pushButton_3_pressed();
void on_pushButton_3_released();
void on_checkBox_stateChanged(int state);
void on_pushButton_2_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
private:
Ui::Widget *ui;
QFile file;
};
#endif // WIDGET_H
源文件
#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:/name.txt");
ui->lineEdit_2->setText(name);
//判断上次退出前勾选的状态
QString ischecked = load_Data("D:/ischeck.txt");
if(ischecked=="1")//已经勾选
{
ui->checkBox->setChecked(1);//进入勾选状态
}
//记住密码
if(ui->checkBox->isChecked())//是勾选状态
{
QString pswd = load_Data("D:/pswd.txt");
ui->lineEdit->setText(pswd);
}
}
Widget::~Widget()
{
QString name =ui->lineEdit_2->text();//记住账号
save_data("D:/name.txt",name);
QString pswd =ui->lineEdit->text();//记住密码
save_data("D:/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());//把Qstring转换为QbyteArray
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);//把QbyteArray转换为Qstring
file.close();
return str;
}
//账号编辑器发生改变时触发的槽函数
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_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_pushButton_3_pressed()
{
ui->lineEdit->setEchoMode(QLineEdit::Normal);//显示密码
}
//显示密码按钮抬起来
void Widget::on_pushButton_3_released()
{
ui->lineEdit->setEchoMode(QLineEdit::Password);//隐藏密码
}
void Widget::on_checkBox_stateChanged(int state)
{
if(state==0)//未勾选
{
save_data("D:/ischeck.txt","0");
}else{//勾选
save_data("D:/ischeck.txt","1");
}
}
void Widget::on_pushButton_2_clicked()
{
QString name =ui->lineEdit_2->text();//获取当前账号文本
QString base =load_Data("D:/name.txt");//获取文件内账号文本
if(name!=base)
{
save_data("D:/name.txt",name);
QString str =load_Data("D:/name.txt");
ui->listWidget->addItem(str);//添加到Listwidget中
}else{
}
}
void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
ui->listWidget->clear();
}
测试文件
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
2.完成一个计算器,ui界面如下
完成+-*/计算功能并且在对应位置显示对应的数据
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_9_clicked();
void on_pushButton_10_clicked();
void on_pushButton_11_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_14_clicked();
void on_pushButton_16_clicked();
void on_pushButton_12_clicked();
void on_pushButton_8_clicked();
void on_pushButton_4_clicked();
void on_pushButton_15_clicked();
void on_pushButton_13_clicked();
private:
Ui::Widget *ui;
bool flag;
QString symbol;
};
#endif // WIDGET_H
源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
//数值按钮
void Widget::on_pushButton_9_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"1");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"1");
}
}
void Widget::on_pushButton_10_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"2");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"2");
}
}
void Widget::on_pushButton_11_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"3");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"3");
}
}
void Widget::on_pushButton_5_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"4");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"4");
}
}
void Widget::on_pushButton_6_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"5");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"5");
}
}
void Widget::on_pushButton_7_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"6");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"6");
}
}
void Widget::on_pushButton_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"7");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"7");
}
}
void Widget::on_pushButton_2_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"8");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"8");
}
}
void Widget::on_pushButton_3_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"9");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"9");
}
}
void Widget::on_pushButton_14_clicked()
{
if(flag == 0)
{
QString str = ui->lineEdit->text();
ui->lineEdit->setText(str+"0");
}
else{
QString str = ui->lineEdit_2->text();
ui->lineEdit_2->setText(str+"0");
}
}
//符号按钮
//+
void Widget::on_pushButton_16_clicked()
{
flag = 1;
symbol = "+";
ui->label->setText("+");
}
//-
void Widget::on_pushButton_12_clicked()
{
flag = 1;
symbol = "-";
ui->label->setText("-");
}
//*
void Widget::on_pushButton_8_clicked()
{
flag = 1;
symbol = "*";
ui->label->setText("*");
}
//"/"
void Widget::on_pushButton_4_clicked()
{
flag = 1;
symbol = "/";
ui->label->setText("/");
}
//=
void Widget::on_pushButton_15_clicked()
{
QString str = ui->lineEdit->text();
QString ptr = ui->lineEdit_2->text();
double x = str.toInt();
double y = ptr.toInt();
if(symbol == "+")
{
double num = x + y;
QString str = QString::number(num);
ui->lineEdit_3->setText(str);
}
if(symbol == "-")
{
double num = x - y;
QString str = QString::number(num);
ui->lineEdit_3->setText(str);
}
if(symbol == "*")
{
double num = x * y;
QString str = QString::number(num);
ui->lineEdit_3->setText(str);
}
if(symbol == "/")
{
double num = x / y;
QString str = QString::number(num);
ui->lineEdit_3->setText(str);
}
}
//"清除"
void Widget::on_pushButton_13_clicked()
{
flag = 0;
ui->lineEdit->clear();
ui->lineEdit_2->clear();
ui->lineEdit_3->clear();
ui->label->clear();
}
测试文件
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}