【Qt】Qt控件 | QLCDNumber(计时器) & QProgressBar(进度条) & QCalendarWidget(日历)

目录

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要求,对界面的修改都必须在主线程中完成,所以不允许创建新的线程对界面进行修改

QCalendarWidget

 QCalendarWidget是Qt框架中用于显示日历和处理日期选择的小部件。允许用户查看和选择日期,并支持多种日期显示格式和交互功能

常用属性

属性说明
selectDate当前选中的日期
minimumDate

最小日期

maximumDate最大日期
firstDayOfWeek

每周的第一天(日历的第一列)是周几

gridVisible

是否显示日历的边框

selectionMode

是否允许选择日期

navigationBarVisible

日历上方标题是否显示
horizontalHeaderFormat日历上方标题显示的日期格式
verticalHeaderFormat

日历第一列显示的内容格式

dateEditEnabled是否允许日期被编辑

 重要信号

信号说明
selectionChanged(const QDate&)当选中的日期发生改变时发出
activated(const QDate&)

当双击一个有效日期或按下回车键时发出,形参是一个QDate类型,保存了当前选中的日期

currentPageChanged(int, int)当当前页面的年份月份改变时发出,形参是改变后的新年份和月份

示例:selectionChanged信号发出 

Qt Designer设计的界面如下:

添加selectionChanged信号的槽函数

void Widget::on_calendarWidget_selectionChanged()
{
    ui->label->setText(ui->calendarWidget->selectedDate().toString());
}

程序运行如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值