QT实现计算器

1:在注册登录的练习里面,

追加一个QListWidget 项目列表

要求:点击注册之后,将账号显示到 listWidget上面去

以及,在listWidget中双击某个账号的时候,将该账号删除

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QByteArray>
#include <QWidget>
#include <QFile>
#include <QString>
#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 seve_data(const QString& filename,const QString& data);

    QString load_data(const QString& filename);

    void seve_pwd(const QString& filename,const QString& data);

    QString load_pwd(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_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:/1.txt");
    ui->lineEdit->setText(name);

    QString pwd=load_pwd("D:/pwd.txt");
    ui->lineEdit_2->setText(pwd);
}

Widget::~Widget()
{
    QString str=ui->lineEdit->text();
    seve_data("D:/1.txt",str);

    if(ui->checkBox->QCheckBox::checkState()==Qt::Checked)
    {
         QString pwd=ui->lineEdit_2->text();
         seve_pwd("D:/pwd.txt",pwd);
    }

    delete ui;
}

void Widget::seve_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::seve_pwd(const QString &filename, const QString &data)
{
    file.setFileName(filename);
    file.open(QFile::WriteOnly);
    file.write(data.toLocal8Bit());

    file.close();
}

QString Widget::load_pwd(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 pwd=ui->lineEdit_2->text();
    if(name.isEmpty() || pwd.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 pwd=ui->lineEdit_2->text();
    if(name.isEmpty() || pwd.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_pushButton_clicked()
{
    QString name=ui->lineEdit->text();

    QList<QListWidgetItem *> item=ui->listWidget->findItems(name,Qt::MatchExactly);

    if(item.isEmpty())
    {
        ui->listWidget->addItem(name);
    }

}

void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
     int row = ui->listWidget->row(item);

     delete ui->listWidget->takeItem(row);
}

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界面如下 完成 +-*/计算功能并且在对应位置显示对应的数据

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QString>

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

    void on_pushButton_14_clicked();

    void on_pushButton_15_clicked();

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

    void on_pushButton_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_8_clicked();

    void on_pushButton_12_clicked();

    void on_pushButton_16_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::Widget *ui;
    QString first;
    QString symbol;
    QString second;
    QString equal;
    int falg;
};
#endif // WIDGET_H

 widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    ,falg(0)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

//  1
void Widget::on_pushButton_13_clicked()
{
    if(falg==0)
    {
        first+='1';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='1';
        ui->lineEdit_2->setText(second);
    }
}
// 2
void Widget::on_pushButton_14_clicked()
{
    if(falg==0)
    {
        first+='2';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='2';
        ui->lineEdit_2->setText(second);
    }
}
// 3
void Widget::on_pushButton_15_clicked()
{
    if(falg==0)
    {
        first+='3';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='3';
        ui->lineEdit_2->setText(second);
    }
}
// 4
void Widget::on_pushButton_9_clicked()
{
    if(falg==0)
    {
        first+='4';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='4';
        ui->lineEdit_2->setText(second);
    }
}
// 5
void Widget::on_pushButton_10_clicked()
{
    if(falg==0)
    {
        first+='5';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='5';
        ui->lineEdit_2->setText(second);
    }
}
// 6
void Widget::on_pushButton_11_clicked()
{
    if(falg==0)
    {
        first+='6';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='6';
        ui->lineEdit_2->setText(second);
    }
}
// 7
void Widget::on_pushButton_5_clicked()
{
    if(falg==0)
    {
        first+='7';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='7';
        ui->lineEdit_2->setText(second);
    }
}
// 8
void Widget::on_pushButton_6_clicked()
{
    if(falg==0)
    {
        first+='8';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='8';
        ui->lineEdit_2->setText(second);
    }
}
// 9
void Widget::on_pushButton_7_clicked()
{
    if(falg==0)
    {
        first+='9';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='9';
        ui->lineEdit_2->setText(second);
    }
}
// 0
void Widget::on_pushButton_2_clicked()
{
    if(falg==0)
    {
        first+='0';
        ui->lineEdit->setText(first);
    }else if(falg==1)
    {
        second+='0';
        ui->lineEdit_2->setText(second);
    }
}
// C
void Widget::on_pushButton_clicked()
{
    first.clear();
    ui->lineEdit->setText(first);
    second.clear();
    ui->lineEdit_2->setText(second);
    symbol.clear();
    ui->label->setText(symbol);
    equal.clear();
    ui->lineEdit_3->setText(equal);
    falg=0;
}
// +
void Widget::on_pushButton_4_clicked()
{
    falg=1;
    symbol='+';
    ui->label->setText(symbol);
}
// -
void Widget::on_pushButton_8_clicked()
{
    falg=1;
    symbol='-';
    ui->label->setText(symbol);
}
// *
void Widget::on_pushButton_12_clicked()
{
    falg=1;
    symbol='*';
    ui->label->setText(symbol);
}
// ‘/’
void Widget::on_pushButton_16_clicked()
{
    falg=1;
    symbol='/';
    ui->label->setText(symbol);
}
// =
void Widget::on_pushButton_3_clicked()
{
    falg=2;
    double f=atoi(first.toLocal8Bit().data());
    double s=atoi(second.toLocal8Bit().data());
    if(symbol=='+')
    {
        double result=f+s;
        QString r;
        r.setNum(result);
        ui->lineEdit_3->setText(r);
    }else if(symbol=='-')
    {
        double result=f-s;
        QString r;
        r.setNum(result);
        ui->lineEdit_3->setText(r);
    }
    else if(symbol=='*')
    {
        double result=f*s;
        QString r;
        r.setNum(result);
        ui->lineEdit_3->setText(r);
    }else
    {
        double result=f/s;
        QString r;
        r.setNum(result);
        ui->lineEdit_3->setText(r);
    }

}

 main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring IoC配置(xml+组件类的生命周期方法)

文末有本篇文章对应的项目源码文件可供下载 生命周期方法概念 我们可以在组件类中定义一个或者两个方法&#xff0c;然后当Spring IoC容器实例化和销毁组件类对象的时候进行自动调用.我们定义的方法就叫做组件的生命周期方法. 类似于Servlet的init/destroy方法,Tomcat可以在…

一篇吃透模型:all-MiniLM-L6-v2

MiniLM 是什么&#xff1f; MiniLM 是微软研究院开发的一种轻量级的语言模型&#xff0c;旨在以较小的参数量和计算成本实现与大型语言模型&#xff08;如 BERT&#xff09;相当的性能。它是基于 Transformer 架构的预训练模型&#xff0c;通过深度自注意力蒸馏&#xff08;De…

vue3之echarts仪表盘

vue3之echarts仪表盘 效果如下&#xff1a; 版本 "echarts": "^5.5.1" 核心代码&#xff1a; <template><div ref"chartRef" class"circle"></div> </template> <script lang"ts" setup>…

【C语言初阶】操作符_作业详解的一些疑问

前言&#xff1a; b站鹏哥视频&#xff0c;来源以下链接 76. 【C语言初阶】操作符_作业讲解_哔哩哔哩_bilibili 目的&#xff1a; 记录视频里面没有理解的相关知识 疑惑的地方&#xff1a; 对c语言的那个&#xff0c;\n不是特别了解&#xff0c;就是输入了一个字符&#x…

本地部署 DeepSeek:从 Ollama 配置到 Spring Boot 集成

前言 随着人工智能技术的迅猛发展&#xff0c;越来越多的开发者希望在本地环境中部署和调用 AI 模型&#xff0c;以满足特定的业务需求。本文将详细介绍如何在本地环境中使用 Ollama 配置 DeepSeek 模型&#xff0c;并在 IntelliJ IDEA 中创建一个 Spring Boot 项目来调用该模型…

【网络编程】之TCP实现客户端远程控制服务器端及断线重连

【网络编程】之TCP实现客户端远程控制服务器端及断线重连 TCP网络通信实现客户端简单远程控制主机基本功能演示通信过程代码实现服务器模块执行命令模块popen系列函数 客户端模块服务器主程序 windows作为客户端与服务器通信#pragma comment介绍 客户端使用状态机断线重连代码实…

ROS环境搭建

ROS首次搭建环境 注&#xff1a;以下内容都是在已经安装好ros的情况下如何搭建workplace 一、创建工作空间二、创建ROS包三、注意 注&#xff1a;以下内容都是在已经安装好ros的情况下如何搭建workplace 如果没有安装好&#xff0c;建议鱼香ros一步到位:鱼香ROS 我也是装了好久…

centos7操作系统下安装docker,及查看docker进程是否启动

centos7下安装docker&#xff0c;需要用到的yun命令 &#xff08;yum命令用于添加卸载程序&#xff09; 1.设置仓库&#xff1a; yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2.安装 Docker Engine-Community yum in…

IO基础知识和练习

一、思维导图 二、练习 1.使用标准IO函数&#xff0c;实现文件的拷贝 #include <head.h> int main(int argc, const char *argv[]) {FILE *pfopen("./one.txt","r");FILE *fpfopen("./two.txt","r");if(pNULL)PRINT_ERROR(&qu…

Linux驱动开发之串口驱动移植

原理图 从上图可以看到RS232的串口接的是UART3&#xff0c;接下来我们需要使能UART3的收发功能。一般串口的驱动程序在内核中都有包含&#xff0c;我们配置使能适配即可。 设备树 复用功能配置 查看6ull如何进行uart3的串口复用配置&#xff1a; 设备树下添加uart3的串口复用…

2.css简介

什么是css&#xff1a; CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档&#xff08;如 HTML 文档或 XML 应用&#xff09;添加样式&#xff08;字体、间距和颜色等&#xff09;的计算机语言&#xff0c;CSS 文件扩展名为 .…

数据可视化02-PCA降维

一、PCA PCA做什么&#xff1f;找坐标系。 目标&#xff1f;二维降到一维&#xff0c;信息保留最多。 怎么样最好&#xff1f;数据分布最分散的方向&#xff08;方差最大&#xff09;&#xff0c;作为主成分&#xff08;坐标轴&#xff09;。 二、怎么找主成分&#xff1f; …

TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具

蜂蜜影视是一款基于猫影视开源项目 CatVodTVJarLoader 开发的智能电视软件&#xff0c;专为追求简洁与高效观影体验的用户设计。该软件从零开始编写&#xff0c;界面清爽&#xff0c;操作流畅&#xff0c;特别适合在智能电视上使用。其最大的亮点在于能够自动跳过失效的播放地址…

【word】电子签名设置、保存和调用

设置电子签名&#xff1a;将扫描版或照片 转化为 word的电子签名 保存电子签名&#xff1a;将上述电子签名 存储到 word资料库中 调用电子签名&#xff1a;在正文中使用 快捷键 快速调用word电子签名 1. 设置电子签名 1.1 手写版签名 1.2 插入到word 插入 - 图片 1.3 着色效…

KVM虚拟机磁盘创建探究-1

在使用 virt-install 命令时&#xff0c;像 --disk path/var/lib/libvirt/images/vm1.qcow2,size20 这样的参数配置会自动创建指定路径和大小的磁盘镜像文件&#xff0c;不需要再单独使用 qemu-img 去创建。 详细解释 当你使用 virt-install 并指定 --disk 参数时&#xff0c…

第三十三:6.3. 【mitt】 任意组件通讯

概述&#xff1a;与消息订阅与发布&#xff08;pubsub&#xff09;功能类似&#xff0c;可以实现任意组件间通信。 // 引入mitt import mitt from "mitt";// 创建emitter const emitter mitt()/*// 绑定事件emitter.on(abc,(value)>{console.log(abc事件被触发,…

Android Stuido 调整左侧文件导航栏文字大小

Android Studio左侧文件导航栏文字大小默认比较小&#xff0c;这里记录下调整的路径&#xff1a; File-->Settings-->Appearance & Behavior-->Appearance-->勾上“Use custom font:” 就可以调整文字大小了&#xff0c;然后确定就好了。

大模型学习笔记------LLM模型开发流程

大模型学习笔记------LLM模型开发流程 1、总体开发流程2、各部分说明3、总结 LLM(Large Language Model)模型&#xff0c;即大型语言模型是大模型中极其重要的分支。它包含了GPT、BERT、Gemini、Qwen、Llama等&#xff0c;这些大模型衍生了相当多的各种改进版本。这些大模型的开…

剑指 Offer II 040. 矩阵中最大的矩形

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20040.%20%E7%9F%A9%E9%98%B5%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2/README.md 剑指 Offer II 040. 矩阵中最大的矩形 题目描述 给定一个由 …

【含文档+PPT+源码】基于SpringBoot+Vue医药知识学习与分享平台的设计与实现

项目介绍 本课程演示的是一款 基于SpringBootVue医药知识学习与分享平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运…