【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了,也算是搞完了,好累!加油在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu系统安装NVIDIA驱动

通过发行版仓库安装驱动 1. 刷新你的软件包索引&#xff08;更新可用软件包列表&#xff09; sudo apt update 2. 安装推荐的NVIDIA驱动 sudo ubuntu-drivers autoinstall 或者可以使用ubuntu-drivers工具查看推荐的驱动 ubuntu-drivers devices 然后&#xff0c;按照推…

深入学习指针5,与数组和指针相关的笔试题1(C语言)

前言 Hello,亲爱的小伙伴们&#xff0c;我又来了&#xff0c;&#xff0c;今天呢我们一起来学习一下C语言关于数组和指针的部分经典题目。如果觉得不错的话不要忘了点赞&#xff0c;收藏、关注&#xff0c;你的支持就是我更新的最大动力&#xff01;&#xff01; 好&#xff0…

dump.rdb乱码?解析dump.rdb文件的方法

dump.rdb乱码&#xff1f;解析dump.rdb文件的方法 首先&#xff0c;dump.rdb文件是Redis的一个数据备份文件。Redis为了防止缓存失效导致缓存中的数据丢失&#xff0c;提供了两种策略机制&#xff1a;RDB机制和AOF机制。简单来说就是RDB是把数据直接备份到磁盘&#xff0c;而AO…

Java入门基础学习笔记22——程序流程控制

程序流程控制&#xff1a;控制程序的执行顺序。 程序有哪些执行顺序&#xff1f; 顺序、分支和循环。 分支结构&#xff1a; if、switch 循环&#xff1a; for、while、do-while 顺序结构是程序中最简单最基本的流程控制&#xff0c;没有特定的语法结构&#xff0c;按照代码…

防火墙技术基础篇:什么是包过滤技术

什么是防火墙包过滤技术 当数据在网络中传输时&#xff0c;它们被分割成小的单元&#xff0c;称为数据包。防火墙的包过滤是一种基本的网络安全技术&#xff0c;用于检查这些数据包并根据预定义的规则决定是否允许它们通过防火墙。 防火墙包过滤是一种关键的网络安全技术&am…

Functional Programming

1. std::ranges::all_of、std::ranges::any_of、std::ranges::none_of template <class InputIterator, class UnaryPredicate>bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred);template <class InputIterator, class UnaryPredicate&g…

没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库

我们可以根据公网ip用shell来远程连接 首先我们打开自己买的服务器 例如你看这个&#xff0c;就是我们的公网IP 如果服务器里面没有安装mysql数据库的话&#xff0c;那么我们可以用一个轻量级的docker来安装数据库代替一下 我们用docker弄个轻量级的mysql5.7.36&#xff0c;…

号外!IP SSL证书申请只需十分钟!

IP SSL证书是一种专为IP地址设计的SSL证书&#xff0c;它使得基于IP地址的网站或服务能够实现HTTPS加密&#xff0c;确保数据在传输过程中的安全性和完整性。以下是关于IP SSL证书的一些技术性要点和申请流程概述&#xff1a; 一、IP SSL证书技术要点 1、适用场景&#xff1a…

x264 帧类型决策模块 x264_slicetype_analyse 函数原理分析

======================================================================== ======================================================================== x264帧类型决策 x264 的帧类型决策可以参考:

【Unity入门】协程(IEnumerator)的使用方法介绍

目录 一、前言&#xff1a;二、关于协程1、什么是协程2、协程的原理 三、协程的使用1、函数的方式2、函数名的方式3、接收返回值4、StopAllCoroutines5、禁用/销毁游戏对象6、yield return的介绍&#xff1a; 四、小结&#xff1a; 一、前言&#xff1a; 协程在Unity中是一个很…

人机协同是虚拟与真实的协同

“人机协同”是指人类与机器之间的合作与协同工作。在这种协同中&#xff0c;机器可以作为助手、辅助或扩展人类的能力&#xff0c;帮助人们完成任务&#xff0c;提高工作效率和质量。 虚拟与真实的协同是指在人机协同的过程中&#xff0c;虚拟想象世界和真实世界之间的协同。通…

【Spring】Springmvc学习Ⅲ

# Spring&#xff4d;vc学习Ⅲ 文章目录 一、图书管理系统1. 功能1.1 登录前端接口前端代码后端接口后端代码 1.2 图书列表展示步骤:图书类代码mock数据代码控制层调用代码服务层代码&#xff08;存储除数据库中需要存储的数据&#xff09; 2. 分层控制2.1 三层架构2.2 代码重…

缓存一致性

缓存数据一致性 双写模式失效模式 都会导致缓存不一致问题。 解决方案-Canal 更新 DB 会产生的 binlog&#xff0c;Canal 订阅 binlog&#xff0c;监测到数据库的更新&#xff0c;从而更新缓存。 解决方案-分布式读写锁 适用于读多写少的情况

【数据结构】-- 相交链表-环形链表

交叉链表 . - 力扣&#xff08;LeetCode&#xff09; 如果链表的两条链的长度一样&#xff0c;链表两端对齐&#xff0c;解决这个问题将会变得非常简单&#xff0c;直接分别遍历两个链表&#xff0c;想等时的节点即为所求。我们想办法让链表对齐--分别从a和b遍历链表&#xff…

Mysql与Java连接----JDBC

前言: 当将Java与MySQL数据库连接时&#xff0c;JDBC&#xff08;Java Database Connectivity&#xff09;是一种重要的技术。JDBC允许Java应用程序通过标准的数据库访问方式与不同的关系型数据库进行通信&#xff0c;其中包括MySQL。通过使用JDBC&#xff0c;Java开发人员可以…

二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序 1.二叉树的前序遍历 题目&#xff1a; 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff…

aigc的基础知识介绍

AIGC,即人工智能生成内容(Artificial Intelligence Generated Content),是一种利用人工智能技术自动生成各种形式内容的技术。以下是关于AIGC的基础知识介绍: 定义:AIGC指的是利用人工智能技术和算法来自动生成各种形式的内容,如文本、图像、音频和视频等。 发展历程:A…

LeetCode题练习与总结:不同的二叉搜索树Ⅱ--95

一、题目描述 给你一个整数 n &#xff0c;请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,nul…

Unity自定义动画-Animation动画数据-How is “fileIDToRecycleName“ generated

一般美术和程序分工明确的项目 fbx确实是和动画一一对应的&#xff1b; 但一些独立&#xff0c;或者小工作室的项目&#xff0c;就没法保证了&#xff0c;关键还是在于 Unity的 .meta 目录 查找和对比了一下 .fbx 和 .meta&#xff1a; 缓存和不缓存Animation 具体的Animat…

HCIP-Datacom-ARST自选题库_03_VLAN【26道题】

一、单选题 1.QinQ技术是一项扩展VLAN空间的技术&#xff0c;通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能。下列关于QinQ说法错误的是 灵活QinQ可以根据不同的内层Tag而加上不同的外层Tag&#xff0c;对于用户VLAN的划分更加细致 QinQ使VLA…