常用控件QProgreeBar
- 使用QProgressBar表示一个进度条!!!
QProgressBar的核心属性
属性 | 说明 |
---|---|
minimum | 进度条最⼩值 |
maximum | 进度条最⼤值 |
value | 进度条当前值 |
alignment | ⽂本在进度条中的对⻬⽅式. * Qt::AlignLeft : 左对⻬ * Qt::AlignRight : 右对⻬ * Qt::AlignCenter : 居中对⻬ * Qt::AlignJustify : 两端对⻬ |
textVisible | 进度条的数字是否可⻅. |
orientation | 进度条的⽅向是⽔平还是垂直 |
invertAppearance | 是否是朝反⽅向增⻓进度 |
textDirection | ⽂本的朝向 |
format | 展⽰的数字格式. * %p :表⽰进度的百分⽐(0-100) * %v :表⽰进度的数值(0-100) * %m :表⽰剩余时间(以毫秒为单位) * %t :表⽰总时间(以毫秒为单位) |
例子:设置进度条按照时间增长
要求进度条的进度随时间增长而增长(假设,每隔100ms,进度条+1)
在右边属性栏进行初始化。
widget.h文件
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void handle();
private:
Ui::Widget *ui;
QTimer* timer;
};
#endif // WIDGET_H
widget.cpp文件
cpp
#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);
timer->start(100);
}
Widget::~Widget()
{
delete ui;
}
void Widget::handle()
{
int value = ui->progressBar->value();
if(value >= 100)
{
timer->stop();
return;
}
ui->progressBar->setValue(value + 1);
}
这里需要对里面一个内容进行讲解:
- 我们在widget.h中进行了头文件的申明#include< QTimer > ,但是如果将此头文件的声明放在.cpp文件中,而不放在.h文件中,也是可以编译通过的,这是为什么呢?
在Qt内部提供了一个特殊技巧,Qt中有一个专门的头文件,这个头文件中包含了Qt中的所有类的"前置声明"
- class QWidget
- class QPushButton
- class QTimer
- ...
这个头文件一般不会直接接触到,但是包含其他的Qt头文件,都会间接的包含到这个头文件中。
Widget类的前面已经提供了QTimer类的声明,此时就可以在Widget中声明QTimer的指针/引用类型的成员;后续如果想要真正使用QTimer(包括创建实例、使用里面的成员...)仍然需要包含QTimer的头文件(因为QTimer里面包含了QTimer的详细的类的声明)。
- Qt使用这种方式主要是为了解决编译速度的问题(C++编译速度慢和#include头文件有直接关系,因此,减少include头文件的个数,就可以有效的减少编译时间),在Qt中使用class前置声明的方式,以此减少头文件的声明
例子:创建一个红色的进度条
使用styleSheet通过样式来修改进度条的颜色
这里的百分数字,跑到了左上角,这个可能是Qt的bug
可以将百分数字设置在其他位置
进度条具体的进度如何设置,一般都是根据实际的任务类型来灵活设置。