【Qt】常用控件QProgreeBar

常用控件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

可以将百分数字设置在其他位置

进度条具体的进度如何设置,一般都是根据实际的任务类型来灵活设置。

相关推荐
6Hzlia4 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
神仙别闹10 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员10 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
伞伞悦读11 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
qq_1998868713 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
2601_9669496513 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717614 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
汉克老师15 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者15 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN114267600815 小时前
1.3第一个程序的介绍
开发语言·qt