7.双路进度条实现

本文详细介绍如何使用Qt自定义一个独特的进度条组件,通过C++代码实现左右双进度条,展示不同样式和布局技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//main.cpp文件
#include "myprogress.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyProgress w;
    w.show();

    return a.exec();
}

//myprogress.h文件
#ifndef MYPROGRESS_H
#define MYPROGRESS_H

#include <QtWidgets>

class MyProgress : public QWidget
{
    Q_OBJECT

public:
    MyProgress(QWidget *parent = 0);
    ~MyProgress();

private:
    QProgressBar *leftBar;
    QProgressBar *rightBar;

    int val;
};

#endif // MYPROGRESS_H

//myprogress.cpp文件
#include "myprogress.h"

#define  PROGRESS_LEFT_STYLE (QString(""\
    "QProgressBar {"\
    "background-color: #dbdee0;"\
    "border-right:1px solid #00ff00"\
    ""\
    "}"\
    "QProgressBar::chunk {"\
    "background-color:  #FF5500" "}"))

#define  PROGRESS_RIGHT_STYLE (QString(""\
    "QProgressBar {"\
    "background-color: #dbdee0;"\
    "border-left:1px solid #00ff00"\
    ""\
    "}"\
    "QProgressBar::chunk {"\
    "background-color:  #FF5500" "}"))


MyProgress::MyProgress(QWidget *parent)
    : QWidget(parent)
{
    //初始化组件
    val = 50;
    leftBar = new QProgressBar;
    rightBar = new QProgressBar;
    leftBar->setValue(val);
    leftBar->setInvertedAppearance(true); //设置为从右到左增加
    rightBar->setValue(val);
    //设置进度值不显示
    leftBar->setTextVisible(false);
    rightBar->setTextVisible(false);

    //设置纵向可拉伸
    leftBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    rightBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    //设置进度条的样式
    leftBar->setStyleSheet(PROGRESS_LEFT_STYLE);
    rightBar->setStyleSheet(PROGRESS_RIGHT_STYLE);

    //两个进度条做布局
    QHBoxLayout *hlay = new QHBoxLayout;
    hlay->addWidget(leftBar);
    hlay->addWidget(rightBar);
    hlay->setMargin(0);
    hlay->setSpacing(0);

    //定义纵向布局
    QVBoxLayout *vlay = new QVBoxLayout;
    vlay->addStretch(1);  //增加一份空白
    vlay->addLayout(hlay, 5); //把水平布局作为整体,并占5份比例
    vlay->addStretch(1);  //增加一份空白
    vlay->setMargin(0);
    vlay->setSpacing(0);

    //总体布局,将之用于整个窗体
    QHBoxLayout *totalLay = new QHBoxLayout(this);
    totalLay->addStretch(1);
    totalLay->addLayout(vlay, 28);
    totalLay->addStretch(1);
    totalLay->setMargin(0);
    totalLay->setSpacing(0);

    //设置窗体属性
    this->resize(300, 50);
    this->setStyleSheet("background-color:white");
}

MyProgress::~MyProgress()
{

}

#-------------------------------------------------
#
# Project created by QtCreator 2018-05-13T21:06:16
#progress文件
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = porgress
TEMPLATE = app


SOURCES += main.cpp\
        myprogress.cpp

HEADERS  += myprogress.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值