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

【Qt】QLCDNumber和QProgressBar

目录

QLCDNumber

倒计时小程序 

相关属性

QProgressBar

 进度条小程序

相关设置


QLCDNumber

QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值,例如时钟、计时器、计数器

常用属性

属性说明
intValueQLCDNumber显示的初始值(int类型)
value

QLCDNumber显示的初始值(double),和intValue是联动的

例如给value设置为1.5,intValue的值就是2

设置value和intValue的API是display,不是setValue或setIntValue

digitCount显示几位数字,可大致控制LCDNumber的大小
mode

数字显示形式

  • QLCDNumber::Dec    十进制模式,显示常规的十进制数字
  • QLCDNumber::Hex    十六进制模式
  • QLCDNumber::Bin      二进制模式
  • QLCDNumber::Oct      八进制模式

只有十进制的时候才能显示小数点后内容

segmentStyle

设置显示风格

  • QLCDNumber::Flat    平面的显示风格,数字呈现在一个平坦的表面上
  • QLCDNumber::OutLine    轮廓显示风格,数字具有清晰的轮廓和阴影效果
  • QLCDNumber::Filled    填充显示风格,数字被填充颜色并与背景区分开
smallDecimalPoint设置比较小的小数点

倒计时小程序 

倒计时可以使用QTimer,信号和槽实现

QTimer可以通过start()函数设置周期发出timeout信号

void start(int msec);

参数单位是毫秒,start(1000)代表1秒发出一次timeout信号

程序思路如下:

  1. 创建QTimer对象
  2. 关联timeout信号和相应的槽函数
  3. 启动QTimer
  4. 槽函数中修改LCDNumber的值,当倒计时为0时,关闭QTimer

代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置QLCDNumber的初始值ui->lcdNumber->display(10.00);//绑定信号和槽函数//信号使用QTimer(计时器)的timeout信号timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &Widget::handle);//计时器还需要启动timer->start(10);//参数是设定周期,按周期发出timeout信号}void Widget::handle()
{double value = ui->lcdNumber->value();if(value <= 0.0){timer->stop();//倒计时为0时停止计时器return;}ui->lcdNumber->display(value - 0.01);//计时器-1
}

相关属性

segmentStyle,可以设置显示风格

  • QLCDNumber::Flat           平面的显示风格,数字呈现在一个平坦的表面上
  • QLCDNumber::OutLine    轮廓显示风格,数字具有清晰的轮廓和阴影效果
  • QLCDNumber::Filled        填充显示风格,数字被填充颜色并与背景区分开


 digitCount,可以设置显示几位数

QProgressBar

 QProgressBar是Qt框架中用于显示进度的小部件。通常用于表示任务完成的进度或操作的进展情况。

常用属性

属性说明
minimum进度条最小值
maximum

进度条最大值

value进度条当前值
alignment

文本在进度条中的对齐方式

  • Qt::AlignLeft          左对齐
  • Qt::AlignRight       右对齐
  • Qt::AlignCenter     居中对齐
  • Qt::AlingnJustify    两端对齐
textVisible

进度条的数字是否可见

orientation

进度条的方向是水平还是垂直

invertAppearance

是否是朝向反方向增长进度
textDirection文本的朝向
format

展示的数字格式

  • %p:表示进度的百分比(0-100)
  • %v:表示进度的数值(0-100)
  • %m:表示剩余时间(以毫秒为单位)
  • %t:表示总时间(以毫秒为单位)

 进度条小程序

程序思路如下:

  1. 初始化QProgressBar对象
  2. 创建QTimer对象
  3. 关联timeout信号和相应的槽函数
  4. 启动QTimer
  5. 槽函数中修改QProgressBar的值,当进度条满时,关闭QTimer
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置进度条的起始和终止ui->progressBar->setMinimum(0);ui->progressBar->setMaximum(100);//设置定时器timer = new QTimer(this);//连接信号和槽函数connect(timer, &QTimer::timeout, this, &Widget::handle);//启动定时器,周期为0.1秒timer->start(100);
}void Widget::handle()
{int value = ui->progressBar->value();if(value >= 100){timer->stop();return;}ui->progressBar->setValue(value + 1);
}


相关设置

setAlignment()//设置进度条数字的对齐方式

setOrientation()//设置进度条的方向是水平还是垂直
  • setOrientation(Qt::Orientation::Vertical)         垂直方向
  • setOrientation(Qt::Orientation::Horizontal)    水平方向     

setInvertAppearance()//设置进度条是否反向增长,true是从右往左,false是从左往右


上述两个程序都使用了QTimer的timeout信号

读者可能会想到创建一个新的线程,更改倒计时或者进度条的值,但Qt是不允许的

Qt中,界面有一个专门的线程负责维护更新(主线程)

对于GUI来说,内部包含了很多的隐藏状态,Qt为了保证修改界面的过程中,线程安全是不会受到影响的,Qt禁止了其他线程直接修改界面

所以Qt要求,对界面的修改都必须在主线程中完成,所以不允许创建新的线程对界面进行修改

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
  • JRT多列唯一取数据黑科技
  • Golang学习笔记20240725,Go语言基础语法
  • kafka rocketmq rabbitmq相同差异点
  • AI学习指南机器学习篇-SOM在数据聚类和可视化中的应用
  • Maven 的模块化开发示例
  • Spring循环依赖详解
  • MacOS解决安装pycurl的问题 no such file or directory: ‘/usr/lib/libcurl.@libext@‘
  • 基于DPU与SmartNic的云原生SDN解决方案
  • springboot 之 使用easyexcel导出数据到多个sheet,动态表头,自动计算列宽
  • Docker核心技术:Docker原理之Cgroups
  • 全年销售7亿块,巧克力企业如何通过相邻业务打造极致产品力?
  • LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
  • 初阶数据结构之栈和队列
  • huawei 路由 RIP 协议中三种定时器的工作原理
  • 《深入 React 技术栈》
  • 【node学习】协程
  • Git初体验
  • Java 内存分配及垃圾回收机制初探
  • java2019面试题北京
  • js数组之filter
  • js中forEach回调同异步问题
  • MD5加密原理解析及OC版原理实现
  • SOFAMosn配置模型
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue中实现单选
  • 翻译:Hystrix - How To Use
  • 缓存与缓冲
  • 近期前端发展计划
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用 5W1H 写出高可读的 Git Commit Message
  • -- 数据结构 顺序表 --Java
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​渐进式Web应用PWA的未来
  • ​人工智能书单(数学基础篇)
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (六)vue-router+UI组件库
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *1 计算机基础和操作系统基础及几大协议
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net framework profiles /.net framework 配置
  • .Net IE10 _doPostBack 未定义
  • .net Signalr 使用笔记
  • .NET/C# 的字符串暂存池
  • .net6+aspose.words导出word并转pdf
  • .Net的C#语言取月份数值对应的MonthName值