目录
QLCDNumber
倒计时小程序
相关属性
QProgressBar
进度条小程序
相关设置
QLCDNumber
QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值,例如时钟、计时器、计数器等
常用属性
属性 | 说明 |
intValue | QLCDNumber显示的初始值(int类型) |
value | QLCDNumber显示的初始值(double),和intValue是联动的 例如给value设置为1.5,intValue的值就是2 设置value和intValue的API是display,不是setValue或setIntValue |
digitCount | 显示几位数字,可大致控制LCDNumber的大小 |
mode | 数字显示形式
只有十进制的时候才能显示小数点后内容 |
segmentStyle | 设置显示风格
|
smallDecimalPoint | 设置比较小的小数点 |
倒计时小程序
倒计时可以使用QTimer,信号和槽实现
QTimer可以通过start()函数设置周期发出timeout信号
void start(int msec);
参数单位是毫秒,start(1000)代表1秒发出一次timeout信号
程序思路如下:
- 创建QTimer对象
- 关联timeout信号和相应的槽函数
- 启动QTimer
- 槽函数中修改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 | 文本在进度条中的对齐方式
|
textVisible | 进度条的数字是否可见 |
orientation | 进度条的方向是水平还是垂直 |
invertAppearance | 是否是朝向反方向增长进度 |
textDirection | 文本的朝向 |
format | 展示的数字格式
|
进度条小程序
程序思路如下:
- 初始化QProgressBar对象
- 创建QTimer对象
- 关联timeout信号和相应的槽函数
- 启动QTimer
- 槽函数中修改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());
}
程序运行如下