IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Qt小案例《加法计算器》 -> 正文阅读

[C++知识库]Qt小案例《加法计算器》

Qt小案例《加法器》

要使用到的头文件

  • QApplication
  • QWidget
  • QLabel
  • QLineEdit
  • QPushButton
  • QDoubleValidator
  • QHBoxLayout

案例的要求

  • 实现一个加法器(简单的数字计算)
  • 水平布局,可任意缩放
  • x+y=z
  • x和y只接受数字;z只能展示x+y的结果,不能编辑
  • 在x和y的内容是正确之前等号的按钮是禁用的

效果展示

  1. x和y没有数字的时候,等号按钮是灰的(禁用的)

在这里插入图片描述

  1. x和y都有数字的时候,等号的按钮是亮的(可使用的)

在这里插入图片描述

  1. 按下“=”按钮后计算出结果,结果在第三个空显示
    在这里插入图片描述

源代码

  • main.cpp
#include <QApplication>
#include "mywidget.h"	//自定义的头文件,本案例的具体操作都在这里面
int main(int argc,char** args)
{
    QApplication app(argc,args);
    MyWidget w;
    w.show();
    return app.exec();
}
  • mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>				//控件
#include <QPushButton>			//按钮
#include <QLabel>				//标签
#include <QLineEdit>			//行编辑
#include <QHBoxLayout>			//水平布局
#include <QDoubleValidator>		//浮点数检验器
class MyWidget : public QWidget
{
    Q_OBJECT	//使用到了信号和槽,所以是Qt对C++的拓展语法,所以需要加这个宏
public:
    explicit MyWidget(QWidget *parent = nullptr);	//构造函数声明

private:
    QPushButton* btn;	//"="
    QLabel* la;			//"+"
    QLineEdit* x;		//x+y=z
    QLineEdit* y;
    QLineEdit* z;
signals:
public slots:			//槽函数的规定写法
    void onxyEdit();	//响应x和y的编辑内容
    void onBtn();		//响应"="按钮
};

#endif // MYWIDGET_H

  • mywidget.cpp
#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    //先给个个组件进行初始化操作
    x=new QLineEdit(this);
    y=new QLineEdit(this);
    z=new QLineEdit(this);
    btn=new QPushButton("=",this);
    la=new QLabel("+",this);


    //装箱操作
    QHBoxLayout* layout=new QHBoxLayout(this);
    layout->addWidget(x);
    layout->addWidget(la);
    layout->addWidget(y);
    layout->addWidget(btn);
    layout->addWidget(z);

    //设置个个组件的特性

    //右对齐
    x->setAlignment(Qt::AlignRight);
    y->setAlignment(Qt::AlignRight);
    z->setAlignment(Qt::AlignRight);

    //x,y只能输入数字,其他的不行
    x->setValidator(new QDoubleValidator(this));
    y->setValidator(new QDoubleValidator(this));
    z->setReadOnly(true);

    //按钮一开始是禁用状态
    btn->setEnabled(false);

    //连接信号与槽
    
    //x的值改变的时候触发当前窗口的onxyEdit槽函数
    connect(x,SIGNAL(textChanged(const QString&)),
            this,SLOT(onxyEdit()));
    
    //y的值改变的时候触发当前窗口的onxyEdit槽函数
    connect(y,SIGNAL(textChanged(const QString&)),
            this,SLOT(onxyEdit()));
    
    //当按钮被按下的时候触发当前窗口的onBtn槽函数
    connect(btn,SIGNAL(clicked(void)),
            this,SLOT(onBtn(void)));

}

//这个槽函数触发则把把按钮启动
void MyWidget::onxyEdit()
{
    bool xok,yok;
    x->text().toDouble(&xok);	//如果成功把QString转成double则xok==true,否则xok==false
    y->text().toDouble(&yok);	//如果成功把QString转成double则yok==true,否则yok==false
    btn->setEnabled(xok && yok);//如果xok和yok都为true则btn按钮被激活(解除禁用状态)
}

//这个槽函数触发则把计算记过放到z框中
void MyWidget::onBtn()
{
    //先将字符串转成数字然后才相加
    double result=x->text().toDouble()+y->text().toDouble();
    //显示在窗口的内容必须是字符串,所以结果算出来了要再把数字转成字符串
    QString str=QString::number(result);
    //最后把结果给到z
    z->setText(str);
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:24:21  更:2022-01-25 10:25:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:38:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码