【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.hqwc.cn/news/697020.html

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

相关文章

【每日刷题】Day39

【每日刷题】Day39 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 2. 387. 字符串中的第一个唯一字符 - …

实训七:实现用户管理功能

1.题目 实现用户管理功能。 2.目的 (1)理解Node.js程序的基本原理。 (2)掌握利用Node.js建立服务器程序的基本方法。 (3)理解Ajax的工作原理。 (4)掌握编写Ajax程序的基本方法。 (5)会利用所学知识设计简单的应用程序。 3.内容 设计程序能够对用户进行管理&#xff0c;实现查询…

出租车计价器设计与实现(论文 + 源码)

关于java出租车计价器设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304164 出租车计价器设计与实现 摘 要 在我国&#xff0c;出租车行业是八十年代初兴起的一项新兴行业&#xff0c;随着出租车的产生&#xff0c;计价器也就应运而生。但当时在全…

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器&#xff08;ICSR&#xff09;Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…

图片加载框架Glide

目录 一、Glide基础1.1 加载图片1.2 核心代码1.3 占位图1.4 指定图片格式1.5 指定图片大小 二、Glide缓存机制2.1 内存缓存2.2 硬盘缓存2.3 重写getCacheKey() 三、Glide的回调与监听3.1 回调源码追溯3.2 into3.3 preload()方法3.4 downloadOnly()方法3.5 listener()方法 四、图…

一个基于servlet的MVC项目-登录验证

一、MVC的概念 MVC是Model、View、Controller的缩写&#xff0c;分别代表 Web 应用程序中的3种职责1 模型:用于存储数据以及处理用户请求的业务逻辑。 2视图:向控制器提交数据&#xff0c;显示模型中的数据。 3控制器:根据视图提出的请求&#xff0c;判断将请求和数据交给哪个…

2024中国(重庆)航空航天暨无人机低空经济展览会

2024中国&#xff08;重庆&#xff09;航空航天暨无人机低空经济展览会 邀请函 组织机构 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会概括∶ 2024中国航空航天暨无人机低空经济展览会将于2024年8月23-25日在重庆…

【Java EE】多线程(三)线程状态

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

AI2024(64bit) Adobe Illustrator 软件安装包下载

AI2024(64bit) Adobe Illustrator 软件安装包下载地址&#xff1a; 百度网盘下载https://pan.baidu.com/s/1C10-2JVN1rxFF5VFRuV2Yw?pwdSIMS 在创意设计的浩瀚宇宙中&#xff0c;Adobe Illustrator 2024如同一颗璀璨新星&#xff0c;以其无与伦比的创新功能和优化体验&#x…

IO的阻塞和非阻塞浅析

在操作系统和网络编程中&#xff0c;IO&#xff08;输入/输出&#xff09;操作是一个非常重要的概念。 在处理IO的时候&#xff0c;阻塞和非阻塞都是同步IO。只有使用了特殊的API才是异步IO。 ——陈硕大神 网络IO层面 典型的一次IO的两个阶段是什么&#xff1f; 数据准备 和…

Today At Apple 2024.04.20 ipad 绘画 图片管理

文章目录 recreate 软件 绘画图片管理 官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xf…

Operations Research课程之非线性规划(梯度下降|牛顿法|Gurobi+Python)

目录 1.非线性规划介绍 2.梯度下降法(Gradient descent) 2.1 梯度和Hessians矩阵 2.2 梯度下降算法 2.3 算法举例 3. 牛顿法(Newton’s method) 3.1 适合单变量的牛顿法 3.2 适合多变量的牛顿法 3. 实例(GurobiPython) 3.1 Agricultural Pricing问题描述 3.2 Gurobi…