QT-信号与槽

1.在注册登录的练习里面,追加一个QListWidget项目列表
要求:点击注册之后,将账号显示到列表窗口小部件上面去
以及,在列表窗口小部件中双击某个账号的时候,将该账号删除

头文件

#ifndef WIDGET_H
#define WIDGET_H
#include 
#include 
#include 
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 

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 
 
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 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

你可能感兴趣的:(qt,命令模式,开发语言)