【qt】数值的输入与输出

数值的输入与输出

  • 一.与c++中的输入与输出的区别
  • 二.QString转数值
  • 三.数值转QString
    • 1.number()
    • 2.asprintf()
  • 四.小项目
    • 1.总价和进制
    • 2.QSpinBox代替
    • 3.QSlider滑动块
    • 4.QScrollBar滚动条
    • 5.QDial表盘
    • 6.QLcdnumber lcd显示
  • 五.总结一下下

一.与c++中的输入与输出的区别

在c++中我们一般通过控制台进行输入和输出,但是在qt中,我们的输入和输出要在界面中进行。
根据组件的不同,有的组件输入之后的类型是数值,但是有的组件输入之后的类型是QString类型

因此我们要学会QString与数值之间的相互转换,以便我们进行操作

二.QString转数值

这个其实我们在QString字符串中我就讲过,忘了的可以去看看,这里还是提一下吧。
其实就是用**toInt()**这个接口,int可以换成其他类型。

QString str="10086";
int num=str.toInt();
qDebug()<<num;

运行结果就是:10086

还可以加俩个参数第一个是判断是否转换成功
第二个是进制

    int num;
    QString str1="a123";
    bool ret;
    num=str1.toInt(&ret,10);
    if(ret)
    {
        qDebug()<<"转换成功"<<num;
    }
    else
    {
        qDebug()<<"转换失败";
    }

运行的结果:转换失败。
其他类型的都是类似的。

三.数值转QString

1.number()

万物皆有两面,我们来看看数值又如何转换到QString的。
可以用QString自带的静态函数number()

    int num=10086;
    QString str=QString::number(num);
    qDebug()<<str;

就成功的将整型转换成了QString类型!
也可以进行进制的转换

    int num=255;
    QString str=QString::number(num,16);
    qDebug()<<str;

运行结果为:ff 这是16进制哦

还可以对浮点数进行转换

    float num=3.14;
    QString str=QString::number(num,'f',2);
    qDebug()<<str;

f :就是用浮点数的形式进行打印。
e:就是用科学计数法的形式进行打印。
g:会根据具体数值自动的进行f或者e的形式进行打印。

2.asprintf()

还有一种方式也可以进行转换,有点类似于c语言的sprintf()

这个的好处就是可以将数值转换为QString字符串的时候,还可以自定义格式。

    float num=3.1415;
    QString str=QString::asprintf("这个数为:%.2f",num);
    qDebug()<<str;

运行结果:这个数为:3.14

四.小项目

ok,我们现在知道了如何数值与字符串进行转换了,我们就可以来玩界面的东西了。下面我还是会以小的项目来边玩边学。

1.总价和进制

你们知道我刚刚为什么手写运行结果吗?

终于有网了,可以截图了,哈哈哈
目标图:
在这里插入图片描述

我们希望可以用户输入单价和数量后,就可以算出总价。
还有一个功能就是可以进行进制之间的转换。
话不多说,直接开始界面设计:
在这里插入图片描述
记得改每个组件的名字哦,方便你的操作!
这样的界面实在太垃,我们要添加布局
几个组件排列整齐,类似于表格的,我们可以用这个栅格布局
在这里插入图片描述
完美
在这里插入图片描述
然后我们用Spacer来添加空隙,达到自己喜欢的样式
在这里插入图片描述
最后我们对整个窗口进行一个垂直布局就可以达到:
在这里插入图片描述
OK,接下来就开始来实现我们的功能了,首先对计算进行转到槽

void Dialog::on_pushButtonCal_clicked()
{
    int count=ui->lineEditCount->text().toInt();
    float price=ui->lineEditPrice->text().toFloat();
    float total=count*price;
    
    QString ret=QString::number(total,'f',2);
    ui->lineEditTotal->setText(ret);
}

OK,我来讲讲这个代码,我们输入数据是在Line Edit组件里面,所以是QString的类型,但是我们需要做单价*数量的运算
所以我们刚刚学习的第一个点就可以用到了
先将字符串转成数值,然后进行乘法运算。
然后我们需要把结果输出到总价框中,因为里面需要的是字符串格式,所以,我们又将total转换成字符串的格式进行输出。
这就是字符串与数值之间的转换的具体用法。
可以先简单看下效果:
在这里插入图片描述
按道理总价是我们计算出来的,不允许我们进行输入,所以我们可以对总价的组件的enabled进行关闭。
在这里插入图片描述
然后运行结果:
总结就只能只读了
在这里插入图片描述
接下来我们开始对进制的功能进行实现。

void Dialog::on_pushButton10_clicked()
{
    int dec=ui->lineEdit10->text().toInt();
    QString hex=QString::number(dec,16);
    QString bin=QString::number(dec,2);
    ui->lineEdit2->setText(bin);
    ui->lineEdit16->setText(hex);
}

void Dialog::on_pushButton2_clicked()
{
    bool ret;
    int bin=ui->lineEdit2->text().toInt(&ret,2);
    QString hex=QString::number(bin,16);
    QString dec=QString::number(bin,10);
    ui->lineEdit10->setText(dec);
    ui->lineEdit16->setText(hex);
}

void Dialog::on_pushButton16_clicked()
{
    bool ret;
    int hex=ui->lineEdit16->text().toInt(&ret,16);
    QString bin=QString::number(hex,2);
    QString dec=QString::number(hex,10);
    ui->lineEdit10->setText(dec);
    ui->lineEdit2->setText(bin);
}

原理基本相同:将进制框里输入的东西拿出来,转换成相应进制的数值,然后再转换成相应的字符串,设置到界面框中。
运行结果:
在这里插入图片描述
都可以相互转换,你们可以玩玩,不截图了。

现在咱们来讲讲那些不需要转换,输入之后就直接是数值的组件

2.QSpinBox代替

先看目标界面:
在这里插入图片描述
好,我们现在开始用SpinBox来进行替换:
在这里插入图片描述
Spin Box输出进制可以自己进行设置:
在这里插入图片描述
这里可以自动的转换成相应的进制然后再输出
Spin Box的默认最大值为99,可以自己进行设置
在这里插入图片描述
这里可以设置spin框的前缀:
在这里插入图片描述

void Dialog::on_pushButtonCal_clicked()
{
    int count=ui->spinBoxCount->value();//就可以直接拿出值
    double price=ui->doubleSpinBoxPrice->value();
    double total=count*price;
    ui->doubleSpinBoxTotal->setValue(total);
}

void Dialog::on_pushButton10_clicked()
{
    int dec=ui->spinBox10->value();
    ui->spinBox2->setValue(dec);
    ui->spinBox16->setValue(dec);
}

void Dialog::on_pushButton2_clicked()
{
   int bin=ui->spinBox2->value();
   ui->spinBox10->setValue(bin);
   ui->spinBox16->setValue(bin);
}

void Dialog::on_pushButton16_clicked()
{
    int hex=ui->spinBox16->value();
    ui->spinBox2->setValue(hex);
    ui->spinBox10->setValue(hex);
}

现在的代码实现就不用再进行字符串的转换了,同时设置时也不用我们来转进制,因为在外面界面创建spin box时就添加了进制转换
是不是爽翻了,多注意注意Spin Box的属性就可以了。
运行结果:
在这里插入图片描述
非常好玩,你也去试试吧!

3.QSlider滑动块

目标图:
OK,我们来讲下一个
在这里插入图片描述
首先进行拖放
在这里插入图片描述

这里可以设置显示刻度
在这里插入图片描述
还可以进行范围的设置,因为我们rgb调色的范围是0~255;
在这里插入图片描述
开始用格栅进行布局:
在这里插入图片描述
然后再进行垂直布局
在这里插入图片描述
接下来转到槽,记得改名字哦。

用这个信号:
在这里插入图片描述
代码:

void Dialog::on_horizontalSliderRed_valueChanged(int value)
{
    int red=ui->horizontalSliderRed->value();
    int green=ui->horizontalSliderGreen->value();
    int blue=ui->horizontalSliderBlue->value();
    int trans=ui->horizontalSliderTrans->value();

    QColor color=QColor::fromRgb(red,green,blue,trans);
    auto pei=ui->textEdit->palette();
    pei.setColor(QPalette::Base, color);//对背景添加颜色
    ui->textEdit->setPalette(pei);
}

代码解释:拿出各个滑动块的值,然后用rgb配色,再拿出文本编辑器的调色板来进行修改和设置。
运行结果:
在这里插入图片描述
为什么没有效果?
因为我们透明度开满了,太透明了。
可以去属性栏位透明度滑块添加一个初始值。
在这里插入图片描述
现在就有颜色了:
在这里插入图片描述
接下来我们可以对绿蓝,透明度用转到槽,但是没必要,因为实现的功能代码一模一样,我们可以手动的将绿蓝和透明度的信关联我们的红色的槽函数
就相当于一个槽函数对应多个信号!

void Dialog::initSignalSlots()
{
    connect(ui->horizontalSliderBlue,SIGNAL(valueChanged(int)),
            this,SLOT(on_horizontalSliderRed_valueChanged(int)));
    connect(ui->horizontalSliderGreen,SIGNAL(valueChanged(int)),
            this,SLOT(on_horizontalSliderRed_valueChanged(int)));
    connect(ui->horizontalSliderTrans,SIGNAL(valueChanged(int)),
            this,SLOT(on_horizontalSliderRed_valueChanged(int)));
}

现在就可以调色了,太酷了,这个颜色挺好看!
在这里插入图片描述

4.QScrollBar滚动条

滚动条也可以直接拿到数值
目标图:
在这里插入图片描述
这个简单我们直接开始:
拖个大概:
在这里插入图片描述
直接一个垂直布局,然后设置滚动条值的范围。
在这里插入图片描述
然后直接对Scroll Bar转到槽,用这个信号:
在这里插入图片描述
代码:

void Dialog::on_horizontalScrollBar_valueChanged(int value)
{
    ui->textEdit->selectAll();//选择所有的字体
    ui->textEdit->setFontPointSize(value);//根据滚动条的值来配置字体大小
}

效果:
在这里插入图片描述

你也试试自己去玩。

5.QDial表盘

目标效果:
在这里插入图片描述
话不多说,直接拖放:
在这里插入图片描述
修改范围:
在这里插入图片描述
显示刻度:
在这里插入图片描述
直接转到槽:
还是这个信号
在这里插入图片描述
代码:

void Dialog::on_dial_valueChanged(int value)
{
    QString ret=QString::asprintf("%d Km/h",value);
    ui->label->setText(ret);
}

先转换成为字符串再添加到标签组件
运行结果:
在这里插入图片描述
帅呆了,是不是像车的表盘,哈哈
现在我们还可以添加一个进度条:

void Dialog::on_dial_valueChanged(int value)
{
    QString ret=QString::asprintf("%d Km/h",value);
    ui->label->setText(ret);
    ui->progressBar->setValue(value);
}

运行结果:
在这里插入图片描述
记得进度条的范围要和轮盘的一样哦。

6.QLcdnumber lcd显示

目标图:
在这里插入图片描述
这里需要一个LCD Number组件
老规矩,先拖放吧
在这里插入图片描述
可以用Group Box来把后面同一类的单选按钮放在一起,然后可以对group内进行布局。
在这里插入图片描述
先对三个组件进行一个水平布局,然后对窗口进行一个垂直布局
在这里插入图片描述
默认选中10进制,LCD显示3位数
在这里插入图片描述
先对表盘进行转到槽:

void Dialog::on_dial_valueChanged(int value)
{
    ui->lcdNumber->display(value);//LCD的显示
}

然后对几个单选按钮进行转到槽:

void Dialog::on_radioButton10_clicked()
{
    ui->lcdNumber->setDigitCount(3);//LCD显示3位数
    ui->lcdNumber->setDecMode();//设置为10进制;

}

void Dialog::on_radioButton2_clicked()
{
    ui->lcdNumber->setDigitCount(8);
    ui->lcdNumber->setBinMode();
}

void Dialog::on_radioButton8_clicked()
{
    ui->lcdNumber->setDigitCount(3);
    ui->lcdNumber->setOctMode();
}

void Dialog::on_radioButton16_clicked()
{
    ui->lcdNumber->setDigitCount(3);
    ui->lcdNumber->setHexMode();
}

一个是设置位数,一个是设置进制不用我多说了吧
效果展示:
在这里插入图片描述
真的很好玩,你也去试试吧,一直转盘。

五.总结一下下

经过这些小项目,想必你应该对数值的输入和输出有了自己的理解
说白了就是为了适应界面的输入和输出。
界面有的组件需要字符串,而计算我们需要数值,所有我们需要根据我们的需求来进行转换。

OK了,也算是搞完了,好累!加油在这里插入图片描述

不积蹞步,无以至千里; 不积小流,无以成江海

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

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

相关文章

使用LangChain和Neo4j快速创建RAG应用

大家好&#xff0c;Neo4j 通过集成原生的向量搜索功能&#xff0c;增强了其对检索增强生成&#xff08;RAG&#xff09;应用的支持&#xff0c;这标志着一个重要的里程碑。这项新功能通过向量索引搜索处理非结构化文本&#xff0c;增强了 Neo4j 在存储和分析结构化数据方面的现…

【MYSQL】一颗B+树可以保存多少条数据

引言 事万物都有自己的单元体系&#xff0c;若干个小单体组成一个个大的个体。就像拼乐高一样&#xff0c;可以自由组合。所以说&#xff0c;如果能熟悉最小单元&#xff0c;就意味着我们抓住了事物的本事&#xff0c;再复杂的问题也会迎刃而解。 存储单元 存储器范围比较大…

虚拟资源在线交易服务平台源码 线上虚拟商品交易平台搭建

在信息爆炸的时代&#xff0c;虚拟资源、素材、源码系统等等以其独特的魅力&#xff0c;逐渐成为人们日常生活和工作中不可或缺的一部分。如何高效地获取、管理和交易这些虚拟资源&#xff0c;分享一款虚拟资源在线交易服务平台源码&#xff0c;轻松搭建线上虚拟商品交易平台&a…

本来还挺喜欢……

前阵子买了个天空星开发板&#xff0c;到手之后发觉不对劲。 之前我们玩玩开发板都是用的面包板的&#xff0c;就算是ESP那种比较宽的板子用两个面包板拼一下也勉强可以用。 但是天空星它的引脚是分为两组&#xff0c;每组有两排&#xff0c;如果我们还是直接使用面包板的话&a…

【JVM】从可达性分析,到JVM垃圾回收算法,再到垃圾收集器

《深入理解Java虚拟机》[1]中&#xff0c;有下面这么一段话&#xff1a; 在JVM的各个区域中&#xff0c;如虚拟机栈中&#xff0c;栈帧随着方法的进入和退出而有条不紊的执行者出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的&#xff08;尽管在…

C++--String类

系列文章目录 文章目录 目录 系列文章目录 文章目录 前言 一、为什么要学习string 1.c语言的字符串 2.OJ上的使用 二、string类的接口介绍 1.string简介 2.string构造成员函数 3.operator函数 4.string容器size和length 5.重载operator[]和引用返回的意义 5.1 oper…

如何开通微软必应bing国内竞价广告账户?

微软必应Bing作为全球第二大搜索引擎&#xff0c;凭借其特有的用户群和市场定位&#xff0c;为中国广告主开辟了一片潜力无限的蓝海市场。云衔科技通过专业实力&#xff0c;为广告主提供全方位支持&#xff0c;从开户到代运营&#xff0c;助力企业扬帆起航。 一、微软必应bing…

百度云防护502 Bad Gateway原因总结和处理方法

最近&#xff0c;随着原百度云加速用户新接入百度云防护后&#xff0c;很多站长反馈网站打不开&#xff0c;出现了502 Bad Gateway的情况。 为此&#xff0c;百度云这里给大家总结下&#xff0c;出现502的大概几个原因&#xff1a; 1.服务器防火墙拦截了百度云防护的IP节点请求…

(docker)进入容器后如何使用本机gpu

首次创建容器&#xff0c;不能直接使用本机gpu 在系统终端进行如下配置&#xff1a; 1.安装NVIDIA Container Toolkit 进入Nvidia官网Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation&#xff0c;安装NVIDIA Container Toolkit …

红黑树(RBTree)认识总结

一、认识红黑树 1.1 什么是红黑树&#xff1f; 红黑树是一种二叉搜索树&#xff0c;与普通搜索树不同的是&#xff0c;在每个节点上增加一个“颜色”变量 —— RED / BLACK 。 通过对各个节点颜色的限制&#xff0c;确保从 根 到 NIL &#xff0c;没有一条路径会比其他路径长出…

R语言软件安装及配置

1、下载 网址&#xff1a;www.r-project.org 1.1 下载R 选择download R 选择清华源进行下载 根据自己系统情况下载&#xff0c;我选择windows系统。 先选择base。 选择最新的版本下载。 1.2 下载RTools 下载好后&#xff0c;返回&#xff0c;选择RTools进入后&#xff0c;选…

替换spring-boot中的组件版本

spring-boot是一个用于简化开发的框架&#xff0c;引入spring-boot后会自动包含spring框架&#xff0c;通过引入xxx-start来完成指定组件的功能。比如&#xff1a; spring-boot-starter-web(嵌入 Tomcat 和 web 开发需要的 servlet 和 jsp 支持)spring-boot-starter-data-jpa(…

python EEL应用程序的启动过程

EEL 启动流程 初始化 EEL (eel.init()): 设定静态文件目录&#xff0c;通常是包含 HTML、CSS、JavaScript 等文件的目录。扫描指定目录下的 JavaScript 文件&#xff0c;寻找通过 eel.expose() 暴露的函数。 启动 Web 服务器 (eel.start()): 基于 Bottle 框架启动一个轻量级的 …

2024年3月 青少年等级考试机器人理论真题四级

202403 青少年等级考试机器人理论真题四级 第 1 题 Arduino UNO/Nano主控板&#xff0c;通过按键开关切换高低电平&#xff0c;电路搭设如下&#xff0c;该电路属于&#xff1f;&#xff08; &#xff09; A&#xff1a;外部上拉电阻电路 B&#xff1a;外部下拉电阻电路 C&a…

防火墙远程桌面端口号修改,通过防火墙修改远程桌面的端口号详细操作步骤

使用防火墙修改远程桌面的端口号是一项涉及系统安全和网络配置的重要任务。 以下是详细的操作步骤&#xff0c;旨在确保您能够安全、有效地完成此操作&#xff1a; 一、准备阶段 1. 了解默认端口号&#xff1a;远程桌面端口号通常是3389&#xff0c;这是一个用于远程访问和控…

五款商用加密软件推荐 | 商用加密软件排行榜

没有网络安全就没有国家安全。信息安全是国家经济社会稳定运行&#xff0c;广大人民群众利益的保障。 对于公司来讲&#xff0c;数据安全同样是企业可持续发展的重要保障&#xff0c;防止内部核心数据、知识产权的泄露是企业数据安全的重要工作。下面是五款企业常用的加密软件…

如何查看centos7是否安装nginx

要查看 CentOS 7 系统上是否安装了 Nginx&#xff0c;您可以使用多种方法来检查。以下是一些常见的方法&#xff1a; 通过 RPM 包管理器查询 在 CentOS 系统上&#xff0c;可以使用 RPM 包管理器来查询已安装的软件包。要查看是否安装了 Nginx&#xff0c;您可以在终端中运行以…

Spring框架概述

目录 1. Spring框架的起源 2. Spring框架的构成 3. Spring的发展历程 4. Spring的开发环境 4.1. Maven安装与配置 &#xff08;1&#xff09;Maven的下载与安装 &#xff08;2&#xff09;配置Maven的环境变量 &#xff08;3&#xff09;本地仓库的配置 &#xff08;4…

使用Baidu Comate五分钟 , 工作时间摸鱼8小时

Baidu Comate&#xff1a;引领智能编码新时代 文章目录 Baidu Comate&#xff1a;引领智能编码新时代一、明日工具&#xff0c;今日领先——百度Comate智能编码助手二、万变不离其宗——适配场景需求三、功能研究3.1 指挥如指掌——指令功能3.2 助手增援——插件功能使用3.3 实…

Raft论文阅读笔记+翻译:In Search of Understandable Consensus Algorithm

In Search of Understandable Consensus Algorithm 摘要 Raft是一种管理复制日志的共识算法。它产生与&#xff08;多&#xff09;Paxos等效的结果&#xff0c;并且与Paxos一样高效&#xff0c;但其结构与Paxos不同。这使得Raft比Paxos更易理解&#xff0c;也为构建实际系统提供…