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

Qt常用控件之QLCDNumber

Qt常用控件之QLCDNumber

  • 1.QLCDNumber的属性
  • 2.实现倒计时
  • 3.其他写法的倒计时

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:QLCDNumber的属性;实现倒计时;其他写法的倒计时
⬆⬆⬆⬆上一篇:Qt常用控件之QLabel(二)
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.QLCDNumber的属性

QLCDNumber是一个专门用来显示数字的控件,类似于老式的计算器的效果
主要来简单讲一下它的属性

函数名函数说明
int intValue()获取QLCDNumber显示的数字值,是int类型的
double value()获取QLCDNumber显示的数字值,是double类型的,如果是给 value 设为1.5, intValue 的值就是 2
display(int)设置QLCDNumber的值,这个命名使用比较特殊,参数可以是int,也可以是double,也可以是字符串(QString)
digitCount()返回当前的值是几位数字
mode数字显示模式,QLCDNumber::Dec :⼗进制模式,显示常规的⼗进制数字。QLCDNumber::Hex :⼗六进制模式,以⼗六进制格式显示数字。QLCDNumber::Bin :⼆进制模式,以⼆进制格式显示数字QLCDNumber::Oct :⼋进制模式,以⼋进制格式显示数字。只有⼗进制的时候才能显示⼩数点后的内容
segmentStyle设置显示⻛格。QLCDNumber::Flat :平⾯的显示⻛格,数字呈现在⼀个平坦的表⾯上。 QLCDNumber::Outline :轮廓显示⻛格,数字具有清晰的轮廓和阴影效果。 QLCDNumber::Filled :填充显示⻛格,数字被填充颜⾊并与背景区分开
smallDecimalPoint设置⽐较小的小数点

在这里插入图片描述

2.实现倒计时

接下来要做的就是通过这个控件实现一个倒计时功能,从10倒数到0然后停止,因此我们需要使用到定时器。在C++中并没有提供定时器的实现,但是在Boost里面提供了对应的功能,在Qt中进行封装了对应的定时器,结合信号槽的机制我们就可以使用
QTimer就是在Qt中的定时器,通过这个类创建出来的对象,就会产生一个timeout这样的信号,可以通过它的start函数来开启定时器,并且在参数中设定触发timeout信号的周期
在这里插入图片描述
在这里插入图片描述当倒计时到<=0的时候可以停止了,这时候我们可以通过定时器的stop函数来进行终止。

3.其他写法的倒计时

除了上面描述的,其实最容易想到的就是循环写法,但是会有一个致命问题就是它并不能将倒计时窗口展示出来,因为它这个代码是写在Widget的构造函数中的,但是显示窗口的show函数在后面(可以从main函数中看到)
在这里插入图片描述
在这里插入图片描述
这就导致了最后只会当倒计时结束为0时,窗口才会显示出来
在这里插入图片描述
那我们就尝试创建一个新的线程来解决这个问题,但是在执行时直接报错了

#include "widget.h"
#include "ui_widget.h"
#include <thread>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
//    //设置QLCDNumber的值
//    ui->lcdNumber->display(10);
//    while(true)
//    {
//        //睡眠一秒
//        std::this_thread::sleep_for(std::chrono::seconds(1));
//        //获取值
//        int value=ui->lcdNumber->intValue();
//        //进行判断是否超过0
//        if(value<=0)
//        {
//            break;
//        }
//        ui->lcdNumber->display(--value);
//    }//创建新线程来完成倒计时的任务std::thread([this](){ui->lcdNumber->display(10);while(true){//睡眠一秒std::this_thread::sleep_for(std::chrono::seconds(1));//获取值int value=ui->lcdNumber->intValue();//进行判断是否超过0if(value<=0){break;}ui->lcdNumber->display(--value);}});}Widget::~Widget()
{delete ui;
}

在这里插入图片描述
这主要是因为在Qt中主线程(main函数所在的线程)是专门用来负责维护更新的界面的,对于GUI而言,内部包含了很多的隐藏状态,Qt为了保证修改界面的过程中,线程安全是不会受到影响的,Qt禁止了其他线程直接修改界面。因此为了确保线程安全,直接要求所有的对界面的修改操作,必须在主线程中完成。
像我们的槽函数默认情况下都是我们的主线程调用的,因此在槽函数中修改界面是没有问题的
在这里插入图片描述
当执行到exec时主线程会进入到事件循环,exec就会一直循环下去,每执行一次循环,都会有一些固定的事情要操作,比如触发信号后调用槽函数

🌸🌸Qt常用控件之QLCDNumber大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

http://www.dtcms.com/a/407061.html

相关文章:

  • Java 实现LCRIME 雾凇变体算法
  • 做logo网站的公司高质量的猎建筑人才
  • 家居品牌网站建设巴中+网站建设
  • 大模型系列—— GPT-5 Codex 正式登陆 Azure AI Foundry
  • 互联网网站怎么做零售app开发公司
  • 有了自己的网站怎样做后台做网站怎么那么难
  • 【RK3576与USB转CAN收发C++实战ubuntu22.04】
  • FreeRTOS临界区管理使用中断的思路(一)
  • 义乌企业网站杭州网站建设推荐q479185700上墙
  • Spring 中的 Bean 有哪些作用域?单例 Bean 在多线程环境下会有线程安全问题吗?为什么?
  • 如何个网站做优化网站是用什么软件做的
  • 远程安全提示再升级!隐私屏开启位置突出、可录入被控锁屏...
  • 现在市面网站做推广好电子商务推广方式有哪些
  • Ansible Playbook 编写与模块详解
  • 114. 二叉树展开为链表
  • 使用 C++ 开发 Vim 插件
  • 企业网站手机端开发家纺网站模板
  • 网站后台怎样登陆什么网站可以做卷子
  • 初始react
  • 从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
  • Spring Validation 校验
  • 好的做彩平图的网站网站的seo 如何优化
  • CTF攻防世界WEB精选基础入门:robots
  • 【网络套接字编程】基于UDP协议的公共聊天室项目
  • python爬虫技术的运用与分析
  • 站长之家查询域名网站建设与维护 电子版
  • 行业商城网站建设多少钱网站建设软件的英文
  • CSS3 核心知识点与实战案例专栏
  • 企业网站建设中存在的问题分析黄冈做网站的公司哪家好
  • 单片机常见的编程语言有哪些?