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

news2024/11/28 23:38:26

概述

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中有着不同的使用场景和技巧,根据具体需求选择合适的控件并灵活运用,可以提高应用程序的用户体验和功能实现。

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

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

相关文章

【交互式分割】——数据可视化

ritm, 交互式分割 数据可视化 数据包括一张图片 正样本点 负样本点 二分类的mask标签 如何模拟多次点击的迭代过程&#xff1f;

ubuntu18.04 RTX3060 rangnet++训练

代码链接&#xff1a; https://github.com/PRBonn/lidar-bonnetal 安装anaconda环境为 CUDA 11.0&#xff08;11.1也可以&#xff09; anaconda环境如下 numpy1.17.2 torchvision0.2.2 matplotlib2.2.3 tensorflow1.13.1 scipy0.19.1 pytorch1.7.1 vispy0.5.3 opencv_python…

【Qt控件之QListWidget】介绍及使用,利用QListWidget、QToolButton、和布局控件实现抽屉式组合控件

概述 QListWidget类提供了基于项目的列表小部件。 QListWidget是一个方便的类&#xff0c;类似于QListView提供的列表视图&#xff0c;但使用经典的基于项目的接口来添加和删除项目。QListWidget使用内部模型来管理列表中的每个QListWidgetItem。 对于更灵活的列表视图小部件…

DVWA-impossible代码审计

文章目录 DVWA靶场—impossible代码审计1.暴力破解&#xff08;Brute Force&#xff09;1.1 代码审计1.2 总结 2.命令注入&#xff08;Command Injection&#xff09;2.1 代码审计2.2 总结 3.跨站请求伪造&#xff08;CSRF&#xff09;3.1 代码审计3.2 总结 4.文件包含漏洞&…

数据挖掘原理与算法

一、什么是闭合项集? Close算法对Apriori算法的改进在什么地方? 闭合项集&#xff1a;就是指一个项集x&#xff0c;它的直接超集的支持度计数都不等于它本身的支持度计数。 改进的地方&#xff1a; 改进方向&#xff1a; 加速频繁项目集合的生成&#xff0c;减少数据库库的扫…

数字秒表VHDL实验箱精度毫秒可回看,视频/代码

名称&#xff1a;数字秒表VHDL精度毫秒可回看 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; 数字秒表的VHDL设计&#xff0c;可以显示秒和毫秒。可以启动、停止、复位。要求可以存储6组时间&#xff0c;可以回看存储的时间 本资源内含2个工程文件&am…

Systemverilog断言介绍(二)

3.2 IMMEDIATE ASSERTIONS 即时断言是最简单的断言语句类型。它们通常被认为是SystemVerilog过程代码的一部分&#xff0c;并在代码评估期间访问时进行评估。它们没有时钟或复位的概念&#xff08;除非有时钟/复位控制其封闭的过程块&#xff09;&#xff0c;因此无法验证跨越时…

【无标题】光伏逆变器的IEC62109测试,逆变器IEC62109测试项目

光伏逆变器的IEC62109测试&#xff0c;逆变器IEC62109测试项目 逆变器又称电源调整器&#xff0c;根据逆变器在光伏发电系统中的用途可分为独立型电源用和并网用二种。根据波形调制方式又可分为方波逆变器、阶梯波逆变器、正弦波逆变器和组合式三相逆变器。对于用于并网系统的…

基于springboot汽车租赁系统

功能如下图所示 摘要 Spring Boot汽车租赁系统的设计旨在满足不断增长的租车市场需求&#xff0c;并通过简化开发和部署流程来提供方便的租车解决方案。系统采用了现代化的架构&#xff0c;主要基于以下技术栈&#xff1a; Spring Boot&#xff1a;作为后端的核心框架&#xff…

VMware——VMware17安装WindowServer2012R2环境(图解版)

目录 一、WindowServer2012R2镜像百度云下载二、安装 一、WindowServer2012R2镜像百度云下载 下载链接&#xff1a;https://pan.baidu.com/s/1TWnSRJTk0ruGNn4YinzIgA 提取码&#xff1a;e7u0 二、安装 打开虚拟机&#xff0c;点击【创建新的虚拟机】&#xff0c;如下图&…

【Java基础面试二十六】、说一说String和StringBuffer有什么区别

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说String和StringBu…

C++项目——云备份-①-项目介绍环境搭建

文章目录 专栏导读1.什么是云备份2.实现目标3.服务端程序负责功能4.服务端功能模块划分5.客户端程序负责功能6.客户端功能模块划分开发环境环境搭建1. gcc 升级7.3版本2.安装 jsoncpp 库3.下载bundle数据压缩库4.下载 httplib 库 专栏导读 &#x1f338;作者简介&#xff1a;花…

【Solution】商品秒杀之Redis缓存与MQ异步优化以及超卖一人一单等问题的解决

目录 一、Demo开始前准备 1、数据库准备 2、项目准备 3、全局唯一id生成器 二、秒杀业务基本实现 1、秒杀基本业务逻辑 2、秒杀接口设计 3、秒杀业务代码实现 4、超卖问题产生 三、保证线程安全解决超卖少卖问题 1、超卖产生的原因 2、加锁方案&#xff1a;乐观锁 …

Go 函数的健壮性、panic异常处理、defer 机制

Go 函数的健壮性、panic异常处理、defer 机制 文章目录 Go 函数的健壮性、panic异常处理、defer 机制一、函数健壮性的“三不要”原则1.1 原则一&#xff1a;不要相信任何外部输入的参数1.2 原则二&#xff1a;不要忽略任何一个错误1.3 原则三&#xff1a;不要假定异常不会发生…

【Linux】如何判断RS-232串口是否能正常使用

1.RS-232串口短接 使用RS-232协议的串口引脚一般如图下所示 为了让串口能够接收到自己发出的串口数据&#xff0c;需要将输出端和输入端&#xff08;RXD和TXD&#xff09;进行短接操作&#xff1a; 短接完成后&#xff0c;才能实现自发自收的功能&#xff08;走其他协议的串口清…

开发者职场“生存状态”大调研报告分析 - 第四版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

Swift使用Embassy库进行数据采集:热点新闻自动生成器

概述 爬虫程序是一种可以自动从网页上抓取数据的软件。爬虫程序可以用于各种目的&#xff0c;例如搜索引擎、数据分析、内容聚合等。本文将介绍如何使用Swift语言和Embassy库编写一个简单的爬虫程序&#xff0c;该程序可以从新闻网站上采集热点信息&#xff0c;并生成一个简单…

【MyBatis】MyBatis日志信息配置

目录 什么是MyBatis相关的日志&#xff1f; 标准日志信息配置&#xff1a; 配置logback日志信息&#xff1a; 什么是MyBatis相关的日志&#xff1f; 首先什么叫做与MyBatis相关的日志呢&#xff1f;就是我们在执行sql语句的时候&#xff0c;如果没有MyBatis相关的日志&…

SpringBoot项目访问后端页面404

检查项目的路径和mapper映射路径没问题后&#xff0c;发现本级pom文件没有加入web启动模块的pom文件中 maven做项目控制时&#xff0c;要注意将maven模块加入到web启动模块中

IDEA项目import报错清理缓存

1、清理maven缓存 2、整个项目清理缓存