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的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪