QProgressBar核心属性
QProgressBar
表示一个进度条
属性 | 说明 |
---|---|
minimum | 进度条最小值 |
maximum | 进度条最大值 |
value | 进度条当前值 |
alignment | 文本在进度条的对齐方式:Qt::AlignLeft :左对齐Qt::AlignRight :右对齐Qt::AlignCenter :居中对齐Qt::AlignJustify :两端对齐 |
textVisible | 进度条数字是否可见 |
orientation | 进度条的方向是水平还是垂直 |
invertAppearance | 是否朝反方向增长进度 |
textDirection | 文本朝向 |
format | 展示数字格式:%p :表示进度的百分比%v :表示进度的数值%m :表示剩余时间(毫秒为单位)%t :表示总时间(毫秒为单位) |
进度条代码演示
创建一个进度条,让进度条随着时间增长(每100ms,进度条数值加一)
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Widget::handle);
//启动定时器(在connect之后)
timer->start(50);
}
Widget::~Widget()
{
delete ui;
}
void Widget::handle()
{
//获取当前进度条值
int val = ui->progressBar->value();
if(val >= 100)
{
//进度条满 停止计算器
timer->stop();
return;
}
ui->progressBar->setValue(val + 1);
}
小发现:在保存gif图片的时候,发现这个gif工具的进度条,竟如此相像
关于头文件包含
此时这个QTimer
的头文件是包含着widget.h
里面的,因为需要this指针访问到,让其成为成员变量
如果将QTimer
头文件放入widget.cpp
,虽然widget.h
里面需要使用到QTimer
这个类,但是这里发现并没有报错,程序能运行
这是因为Qt内部提供了一个专门的头文件,这里面包含了Qt所有类的前置声明,例如:
class Widget
class QTimer
class QPushButton
这个头文件一般不会直接接触到,但是包含其他Qt的头文件,都会间接包含到这个头文件。
所以Widget
类前面已经提供QTimer
类的声明的话,此时就能在Widget
里面声明QTimer
的指针/引用成员,但是如果在后续中想要创建示例实例,还是需要包含QTimer
的头文件的(里面包含了QTimer
类的详细定义)。
Qt引入这个技巧,主要是提高编译速度,因为C/C++代码的编译速度,横向对比其他语言,是很慢的。
这个慢和#include
头文件,有着直接关系,#include
是文本拼接,但是include
关系是错综复杂的,头文件替换展开十分庞大。
因此,尽可能减少头文件的个数,就可以有效减少编译时间。
Qt就使用class
前置声明的方式,来尽量减少头文件的包含。
但是在实际开发当中,还是该包含就包含。
颜色更改
点击确认设置完毕之后,发现这个进度条虽然变成红色了,但是这个数字位置发送了变化,这个估摸着是Qt的bug