当前位置: 首页 > news >正文

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();
}

相关文章:

  • deepseek、腾讯元宝deepseek R1、百度deepseekR1关系
  • 【自学笔记】Spring基础知识点总览-持续更新
  • Java的异常体系中的Error
  • 如何在网页上显示3D CAD PMI
  • Grok 3能否打破大模型的魔咒?
  • 【四.RAG技术与应用】【1.RAG技术揭秘:大模型与检索增强生成】
  • Error Density-dependent Empirical Risk Minimization
  • 基于IMM算法的目标跟踪,四模型IMM|三维环境|4个模型分别是:CV、左转CT、右转CT、CA(基于EKF,订阅专栏后可获得完整源代码)
  • 计算机视觉之dlib人脸关键点绘制及微笑测试
  • VMware虚拟机IP配置
  • GCC RISCV 后端 -- GCC 构建系统简介
  • 《2025软件测试工程师面试》功能测试篇
  • 6.人工智能与机器学习
  • 通过多线程分别获取高分辨率和低分辨率的H264码流
  • C与C++的区别
  • 大型语言模型中微调和提炼的详细技术比较
  • 【C++】可变模板参数和完美转发
  • 蓝桥杯 之 图形规律
  • rollup是什么?以及它和webpack 和vite的区别
  • 【Web安全方向编程语言学习顺序推荐】
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 吴志朴当选福建德化县人民政府县长
  • 2025上海车展 | 当智驾不再让人兴奋,汽车智能化暗战升级
  • 上海112位全国劳动模范和先进工作者接受表彰,樊振东榜上有名
  • 马上评|演唱会云集,上海如何把“流量”变“留量”
  • 图像编辑新增一款开源模型,阶跃星辰发布Step1X-Edit