当前位置: 首页 > news >正文

【Qt控件之微调框、进度条】QSpinBox、QDoubleSpinBox、QDial、QProgressBar介绍及使用

概述

QSpinBox类提供了一个微调框小部件。
在这里插入图片描述
QSpinBox适用于处理整数和离散的值集(例如,月份名称);对于浮点数值,请使用QDoubleSpinBox。
QSpinBox允许用户通过点击上下按钮或按键盘上的上下箭头来增加/减少当前显示的值,也可以手动输入值。微调框支持整数值,但可以通过validate()、textFromValue()和valueFromText()来扩展以使用不同的字符串。
每当值发生变化时,QSpinBox会发出两个valueChanged()信号,一个提供int类型的值,另一个提供QString类型的值。QString版本的函数提供带有前缀和后缀的值。值可以使用value()获取,并使用setValue()进行设置。
通过点击上下按钮或使用键盘加速键的上下箭头,可以按singleStep()的步长增加或减少当前值。如果要更改此行为,可以重新实现虚函数stepBy()。可以使用构造函数之一设置最小值、最大值和步长,并可以使用setMinimum()、setMaximum()和setSingleStep()在之后进行更改。
大多数微调框是定向的,但QSpinBox也可以作为循环微调框运作,即当范围为0-99且当前值为99时,如果setWrapping()设置为true,点击"上"将给出0。如果希望具有循环行为,请使用setWrapping()。
显示的值可以使用任意字符串在前面或后面注明,例如货币单位或计量单位。请参阅setPrefix()和setSuffix()。可以使用text()检索微调框中的文本(包括任何前缀和后缀),或者使用cleanText()检索文本(不包括前缀、后缀和前导或尾随的空格)。
通常希望在数值范围之外给用户提供特殊的选择(通常是默认选择)。有关如何在SpinBox中实现此功能,请参阅setSpecialValueText()。

QDoubleSpinBox类提供了一个带有浮点数的微调框小部件。
QDoubleSpinBox允许用户通过点击上下按钮或按键盘上的上下箭头来增加/减少当前显示的值,也可以手动输入值。微调框支持浮点数值,但可以通过validate()、textFromValue()和valueFromText()来扩展以使用不同的字符串。
每当值发生变化时,QDoubleSpinBox会发出两个valueChanged()信号,一个提供double类型的值,另一个提供QString类型的值。QString版本的函数提供带有前缀和后缀的值。值可以value()获取,并使用setValue()进行设置。
注意:QDoubleSpinBox会四舍五入数字,以便用当前精度显示。在小数位设置为2的QDoubleSpinBox中,调用setValue(2.555)会导致value()返回2.56。
通过点击上下按钮或使用键盘加速键的上下箭头,可以按singleStep()的步长增加或减少当前值。如果要更改此行为,可以重新实现虚函数stepBy()。可以使用构造函数之一设置最小值、最大值和步长,并可以使用setMinimum()、setMaximum()和setSingleStep()在之后进行更改。微调框默认精度为2位小数,但可以使用setDecimals()进行更改。
大多数微调框是定向的,但QDoubleSpinBox也可以作为循环微调框运作,即当范围为0.0-99.9且当前值为99.9时,如果setWrapping()设置为true,点击"上"将给出0。如果希望具有循环行为,请使用setWrapping()。
显示的值可以使用任意字符串在前面或后面注明,例如货币单位或计量单位。请参阅setPrefix()和setSuffix()。可以使用text()检索微调框中的文本(包括任何前缀和后缀),或者使用cleanText()检索文本(不包括前缀、后缀和前导或尾随的空格)。
通常希望在数值范围之外给用户提供特殊的选择(通常是默认选择)。有关如何在QDoubleSpinBox中实现此功能,请参阅setSpecialValueText()。

QDial类提供了一个圆形的范围控件(类似于速度表或电位器)。
QDial用于当用户需要在程序可定义的范围内控制一个值时,范围可以是循环的(例如,角度从0到359度),或者对话框的布局需要一个方形小部件。
由于QDial继承自QAbstractSlider,因此它的行为方式与滑块类似。当wrapping()为false时(默认设置),滑块和刻度盘之间实际上没有什么区别。它们共享相同的信号、槽和成员函数。使用哪个取决于用户的期望和应用程序的类型。
在移动滑块时,刻度盘一开始会连续发出valueChanged()信号;您可以通过禁用tracking属性使其较少地发出该信号。即使禁用了tracking,sliderMoved()信号也会连续发出。
当鼠标按钮按下和释放时,刻度盘还会发出sliderPressed()和sliderReleased()信号。请注意,刻度盘的值可以在不发出这些信号的情况下改变,因为也可以使用键盘和滚轮来更改值。
与滑块不同,QDial尝试绘制一个"漂亮"数量的刻度,而不是逐个绘制。如果可能,绘制的刻度数量每行步长为一个,但如果没有足够的像素来绘制每个刻度,QDial将跳过部分刻度以绘制出一个均匀的集合(例如,每个第二个或第三个刻度)。
与滑块一样,刻度盘将QAbstractSlider的setValue()函数作为slot提供。
刻度盘的键盘界面相当简单:左/上箭头和右/下箭头键通过定义的singleStep调整刻度盘的值,Page Up和Page
Down键通过定义的pageStep进行调整,Home和End键将值设置为定义的最小值和最大值。
如果使用鼠标滚轮调整刻度盘,增量值由wheelScrollLines和Step、pageStep中的较小值决定。

QProgressBar小部件提供了一个水平或垂直的进度条。
在这里插入图片描述
进度条用于向用户显示操作的进度,并向用户保证应用程序仍在运行。
进度条使用步骤的概念。您可以通过指定最小和最大可能的步骤值来设置它,当您稍后给出当前步骤值时,它将显示已完成的步骤的百分比。百分比是通过将进度(value() - minimum())除以maximum() - minimum()来计算的。 您可以使用setMinimum()和setMaximum()指定最小和最大步骤数。使用setValue()设置当前步骤数。进度条可以使用reset()重新设置到开始位置。
如果将最小值和最大值都设置为0,进度条会显示一个繁忙指示器,而不是步骤的百分比。例如,在使用QNetworkAccessManager下载无法确定下载项大小时,这很有用。

具体使用

  1. QSpinBox:
    QSpinBox是一个带有微调按钮的整数微调框。用户可以通过点击上下按钮或直接输入整数来调整值。

    示例代码:

    #include <QApplication>
    #include <QSpinBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QSpinBox spinBox;spinBox.setRange(0, 100); // 设置取值范围spinBox.setSingleStep(1); // 设置步长spinBox.setValue(50); // 设置初始值spinBox.show();return app.exec();
    }
    
  2. QDoubleSpinBox:
    QDoubleSpinBoxQSpinBox类似,但是它支持浮点数的微调。用户通过点击上下按钮或直接输入浮点数来调整值。

    示例代码:

    #include <QApplication>
    #include <QDoubleSpinBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QDoubleSpinBox doubleSpinBox;doubleSpinBox.setRange(0.0, 10.0); // 设置取值范围doubleSpinBox.setSingleStep(0.1); // 设置步长doubleSpinBox.setValue(5.0); // 设置初始值doubleSpinBox.show();return app.exec();
    }
    
  3. QDial:
    QDial是一个旋转式微调框,允许用户通过拖动或点击设置一个整数值。

    示例代码:

    #include <QApplication>
    #include <QDial>int main(int argc, char *argv[]) {QApplication app(argc, argv);QDial dial;dial.setRange(0, 100); // 设置取值范围dial.setValue(50); // 设置初始值dial.show();return app.exec();
    }
    
  4. QProgressBar:
    QProgressBar用于显示进度条,可以表示任务的完成百分比或其他进度信息。

    示例代码:

    #include <QApplication>
    #include <QProgressBar>
    #include <QTimer>int main(int argc, char *argv[]) {QApplication app(argc, argv);QProgressBar progressBar;progressBar.setRange(0, 100); // 设置范围progressBar.setValue(50); // 设置当前值progressBar.show();QTimer timer;QObject::connect(&timer, &QTimer::, [&progressBar]() {int value = progressBar.value();if (value < 100) {progressBar.setValue(value + 10);}});timer.start(1000); // 每秒更新一次进度条return app.exec();
    }
    

    在上面的示例代码中,创建了一个QProgressBar,并使用setValue来设置当前值。通过连接一个定时器的timeout信号来定期更新进度条的值。

结论

QSpinBox、QDoubleSpinBox、QDial和QProgressBar是Qt中常用的控件,以下它们的使用场景和技巧:

  • QSpinBox和QDoubleSpinBox:这两个控件用于让用户输入数字。QSpinBox用于输入整数,而QDoubleSpinBox用于输入浮点数。它们的使用场景包括需要用户输入数字参数的设置界面、数据统计等。使用技巧包括可以通过设置最小值、最大值和步长来限制用户的输入范围,以及可以通过设置前缀和后缀来美化输入数字的显示。
  • QDial:这个控件用于让用户通过旋转来选择数值。它的使用场景包括音响设备上的音量调节、汽车上的空调温度调节等。使用技巧包括可以通过设置最小值、最大值和值改变时的回调函数来控制旋钮的旋转范围和响应行为。
  • QProgressBar:这个控件用于显示任务的进度。它的使用场景包括文件下载、任务处理等的进度显示。使用技巧包括可以通过设置最小值、最大值和当前值来控制进度的显示,以及可以通过设置文本提示来显示进度的具体信息。

综上所述,这些控件在Qt中有着不同的使用场景和技巧,根据具体需求选择合适的控件并灵活运用,可以提高应用程序的用户体验和功能实现。

相关文章:

【Qt控件之微调框、进度条】QSpinBox、QDoubleSpinBox、QDial、QProgressBar介绍及使用

概述 QSpinBox类提供了一个微调框小部件。 QSpinBox适用于处理整数和离散的值集&#xff08;例如&#xff0c;月份名称&#xff09;&#xff1b;对于浮点数值&#xff0c;请使用QDoubleSpinBox。 QSpinBox允许用户通过点击上下按钮或按键盘上的上下箭头来增加/减少当前显示的值…...

Python学习-----Day09

一、利用装饰器来获取函数运行的时间、 #导入time模块 import timedef decorated(fn):def inner():#time.time获取函数执行的时间a time.time() # func开始的时间fn()b time.time() # func结束的时间print(f"{fn.__name__}程序运行的总数时间:{b - a}秒")return…...

世界国家/地区行驶方向数据

Part1数据背景 道路通行方向规则是交通规则的重要部分之一。不同国家及地区通行方向并不一样&#xff0c;受风俗、习惯、风潮因素等影响。 最近也在学道路行驶&#xff0c;结果差强人意&#xff0c;继续努力吧。祝学车的小伙伴们一次过~ Part2数据详情 今天分享的国家/地区行…...

idgen导入Android11源码

文章目录 配置下载AS编译源码依赖导入玩一下andorid.iml 注意&#xff1a; 有些时候发现为啥自己编译就这么难呢&#xff1f;不是卡死就无数次重启虚拟机&#xff0c;一切的原罪在配置过低&#xff0c;换句话说就是穷。关于导入源码的下载参考 Android Studio for Platform (AS…...

大同小异!如何在苹果不同类型设备上更改AirDrop的名称

你可以更改你的AirDrop ID&#xff0c;让其他人看到你名字之外的东西。本文介绍了如何在iPhone、iPad和Mac上更改AirDrop名称。 如何在iPhone上更改AirDrop名称 在iPhone上更改AirDrop名称涉及到你可能不想做的更改。幸运的是&#xff0c;这在iPad和Mac上不是真的&#xff0c…...

sqlmap --os-shell选项原理解析

文章目录 sqlmap --os-shell选项原理解析原理解析总结 sqlmap --os-shell选项原理解析 以sqli第一关为例。 --os-shell 是 SQLMap 工具的一个参数&#xff0c;用于在成功注入数据库后&#xff0c;执行操作系统命令并获取其输出。 sqlmap -u "http://192.168.188.199/sq…...

谈谈 Redis 持久化机制,RDB、AOF

谈谈 Redis 持久化机制&#xff0c;RDB&#xff0c;AOF RDB&#xff1a;相当于对内存中的数据&#xff0c;拍一张数据快照。存储的是数据。 AOF&#xff1a;存储的是具体的命令。 企业实践中&#xff0c;实际是使用RDB结合AOF。 这个方法是在 Redis 4.0 提出的&#xff0c;该方…...

并发编程——2.基础概念及其它相关的概述

这篇文章我们来讲一下并发编程中的线程及其相关的概述内容。 目录 1.J.U.C 2.进程、线程、协程 2.1进程 2.2线程 2.3纤程&#xff08;协程&#xff09; 2.4概念小结 3.并发、并行、串行 3.1并发 3.2并行 3.3串行 3.4概念小结 4.CPU核心数和线程数的关系 5.上下文…...

20231019 filezilla 配置 Windows与Ubuntu文件传输

SFTP协议&#xff0c;传文件&#xff0c;否则会报无权限错...

一个.Net开发的轻量级SQLite数据库ORM

SQLite是一种流行的开源关系型数据库&#xff0c;它的设计目标是提供轻量级、高效、可靠和易用的数据存储服务。由于SQLite无需单独的服务器进程&#xff0c;它通常被用于嵌入式系统和单机应用程序中&#xff0c;也可以用于网络应用程序的辅助数据库。 今天给大家推荐一个.NET开…...

gRPC通信

1. gRPC简介 gRPC是一种高性能、开源和通用的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;由Google开源并维护。它使用Protocol Buffers&#xff08;protobuf&#xff09;作为接口定义语言&#xff08;IDL&#xff09;&#xff0c;提供跨平台、跨语言的RPC调用支…...

湖仓一体架构的特性

湖仓一体架构是一种数据架构模式&#xff0c;具有以下特性&#xff1a; 统一存储&#xff1a;湖仓一体架构将数据湖和数据仓库合并为一个整体&#xff0c;将结构化数据和非结构化数据存储在同一个存储系统中&#xff0c;如Hadoop分布式文件系统&#xff08;HDFS&#xff09;或云…...

Python中使用包含_和__的变量名之间的区别

_:单下划线 例子&#xff1a;_count、_temp 含义&#xff1a;成员的私有成员变量&#xff0c;就像Java中用private关键字修饰一样。 作用&#xff1a;只允许当前类创建的对象和子类对象访问此变量。外部无法访问此变量。 __:双下划线 例子&#xff1a;__count、__temp 含义&am…...

019-第三代软件开发-Git提交规范

第三代软件开发-Git提交规范 文章目录 第三代软件开发-Git提交规范项目介绍Git提交规范分支规范Commit Message FormatHeaderBodyFooterRevert 总结一下 关键字&#xff1a; Qt、 Qml、 git、 Commit、 release 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个…...

MTK APP实现动态修改logo和开机动画

MTK APP实现动态修改logo和开机动画 前言一、修改对新分区的权限1.修改开机动画对新分区的权限2.修改系统APP对新分区的权限3.修改SE权限,不然编译会报错4.修改开机动画文件&#xff0c;让其加载新分区中的文件 二、系统APP代码使用1.系统app修改开机logo2.系统app修改开机动画…...

Spring核心扩展点BeanDefinitionRegistryPostProcessor源码分析

我们知道&#xff0c;只要在一个Java类上加上Component、Service、Controller等注解&#xff0c;就可以被加载到Spring容器中&#xff0c;除了以上方式&#xff0c;加了Bean和Import好像也可以将对象添加到Spring容器中&#xff0c;究竟Spring是如何实现这些功能的呢&#xff1…...

C++实现AC自动机,剪枝、双数组压缩字典树!详解双数组前缀树(Double-Array Trie)剪枝字典树(Patricia Trie)

代码在&#xff1a;github.com/becomequantum 最近研究了一下字典树&#xff0c;什么AC自动机&#xff0c;双数组压缩字典树&#xff0c;剪枝字典树都自己写代码实现了一下。这本该是本科学数据结构时该玩明白的东西&#xff0c;我到现在才会玩。本视频主要介绍一下双数组和剪…...

防火墙规则顺序解决方案

防火墙是保护网络免受攻击的第一道防线&#xff0c;防火墙对互联网和公司IT网络之间的流量拥有绝对控制权&#xff0c;防火墙规则的配置处理调节流量的关键任务。 这些规则会仔细检查传入和传出流量&#xff0c;并根据规则中提到的条件允许或阻止它&#xff0c;防火墙规则越严…...

ZC-CLS381RGB颜色识别+8x8点阵指示(完)

文章目录 前言一、信号关联说明二、演示视频 前言 在前面两篇博客中&#xff0c;分别阐述了如何配置WS2812 RGB 8x8点阵&#xff0c;和如何配置颜色识别模块&#xff0c;本文将说明如何级联两个模块&#xff0c;以及演示两个模块级联后的运行效果。 一、信号关联说明 已知WS28…...

Stanford CS224N - word2vec

最近在听Stanford放出来的Stanford CS224N NLP with Deep Learning这门课&#xff0c;弥补一下之前nlp这块基础知识的一些不清楚的地方&#xff0c;顺便巩固一下基础知识&#x1f601; 关于word2vec&#xff1a; 1.为什么要把单词表示成向量 一开始人们造了一个类似于词典表…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...