基本Widgets(30):【类】QProgressBar [官翻]

本文详细介绍了Qt中的QProgressBar组件,包括其enumDirection枚举、属性设置(如对齐、格式、范围等)、文本显示、构造与析构,以及如何重写关键函数和槽信号。实例演示了如何创建和定制不同方向、格式的进度条,适用于进度指示和下载管理等场景。

QProgressBar Class

QProgressBar小部件提供水平或垂直进度条。

Header#include < QProgressBar >
qmakeQT += widgets
InheritsQWidget
Inherited By

详细说明

img

进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行。

进度条使用步骤的概念。您可以通过指定最小和最大可能的步长值来设置它,当您稍后为它指定当前步长值时,它将显示已完成的步长百分比。百分比的计算方法是将进度(value() -minimum() )除以maximum() -minimum() 。

可以使用setMinimum() 和setMaximum指定最小和最大步数。当前步数是用setValue() 设置的。可以使用reset() 将进度条倒转到开头。

如果“minimum”和“maximum”都设置为0,则条形图将显示忙碌指示器,而不是步长百分比。例如,当使用QNetworkAccessManager下载无法确定要下载的项目大小的项目时,这非常有用。

公共类型

enum Direction

指定垂直进度条文本的读取方向。

ConstantValueDescription
QProgressBar::TopToBottom0文本顺时针旋转90度。
QProgressBar::BottomToTop1文本逆时针旋转90度。

请注意,是否绘制文本取决于样式。当前CleanLooks和Plastique绘制文本。Mac、Windows和WindowsVista样式不支持。

属性

  1. alignment: Qt::Alignment 进度条的对齐方式

    Access functions:

    • Qt::Alignment alignment() const
    • void setAlignment(Qt::Alignment alignment)
  2. format: QString 用于生成当前文本的字符串
    %p–由完成百分比代替。%v–被当前值替换。%m–替换为总步数。

默认值为“%p%”。

Access functions:

  • QString format() const
  • void setFormat(const QString &format)
    • void resetFormat()
  1. invertedAppearance: bool 进度条是否显示其进度
    如果此属性为true,则进度条会向另一个方向(例如从右向左)增长。默认情况下,进度条不会反转。

    Access functions:

    • bool invertedAppearance() const
    • void setInvertedAppearance(bool invert)

  2. maximum: int 最大值

    Access functions:

    • int maximum() const
    • void setMaximum(int maximum)
  3. minimum: int 最小值

    Access functions:

    • int minimum() const
    • void setMinimum(int minimum)
  4. orientation: Qt::Orientation 进度条的方向

    方向必须是Qt::Horizontal(默认值)或Qt::Vertical。

    Access functions:

    • Qt::Orientation orientation() const
    • void setOrientation(Qt::Orientation)

  5. text: const QString 与进度条一起显示的描述性文本
    返回的文本与进度条中心(或某些样式的左侧)显示的文本相同。
    文本中显示的进度可能小于最小值,表示在设置任何进度之前,进度条处于“重置”状态。
    在默认实现中,文本要么包含一个百分比值,表示到目前为止的进度,要么为空,因为进度条处于重置状态。

    Access functions:

    • virtual QString text() const
  6. textDirection: Direction 垂直进度条文本的读取方向
    此属性对水平进度条没有影响。默认情况下,读取方向是QProgressBar::toptobttom。

    Access functions:

    • void setOrientation(Qt::Orientation)
    • virtual QString text() const
  7. textVisible: bool 是否应显示当前完成百分比

    样式可能会忽略此属性(例如,QMacStyle从不绘制文本)。

    Access functions:

    • bool isTextVisible() const
    • void setTextVisible(bool visible)
  8. value: int 进度条的当前值
    尝试将当前值更改为超出最小-最大范围的值对当前值没有影响。

    Access functions:

    • int value() const
    • void setValue(int value)

    Notifier signal:

    • void valueChanged(int value)

公共函数

构造和析构

  1. QProgressBar(QWidget *parent = nullptr)
  2. virtual ~QProgressBar()

属性相关

  1. Qt::Alignment alignment() const
  2. void setAlignment(Qt::Alignment alignment)
  3. QString format() const
  4. void setFormat(const QString &format)
  5. void resetFormat()
  6. bool invertedAppearance() const
  7. void setInvertedAppearance(bool invert)
  8. int maximum() const
  9. void setMaximum(int maximum)
  10. int minimum() const
  11. void setMinimum(int minimum)
  12. Qt::Orientation orientation() const
  13. void setOrientation(Qt::Orientation)
  14. virtual QString text() const
  15. QProgressBar::Direction textDirection() const
  16. void setTextDirection(QProgressBar::Direction textDirection)
  17. bool isTextVisible() const
  18. void setTextVisible(bool visible)
  19. int value() const
  20. void setValue(int value)

重写的公共函数

  1. virtual QSize minimumSizeHint() const override

    QSize QProgressBar::minimumSizeHint() const
    {
        QSize size;
        if (orientation() == Qt::Horizontal)
            size = QSize(sizeHint().width(), fontMetrics().height() + 2);
        else
            size = QSize(fontMetrics().height() + 2, sizeHint().height());
        return size;
    }
    
  2. virtual QSize sizeHint() const override

    QSize QProgressBar::sizeHint() const
    {
        ensurePolished();
        QFontMetrics fm = fontMetrics();
        QStyleOptionProgressBar opt;
        initStyleOption(&opt);
        int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, this);
        QSize size = QSize(qMax(9, cw) * 7 + fm.horizontalAdvance(QLatin1Char('0')) * 4, fm.height() + 8);
        if (opt.orientation == Qt::Vertical)
            size = size.transposed();
        return style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, size, this);
    }
    

    公共槽

    1. void reset()
    2. void setMaximum(int maximum)
    3. void setMinimum(int minimum)
    4. void setOrientation(Qt::Orientation)
    5. void setRange(int minimum, int maximum)
    6. void setValue(int value)

    信号

    1. void valueChanged(int value)

    受保护的函数

    1. void initStyleOption(QStyleOptionProgressBar *option) const

    重写的受保护的函数

    1. virtual bool event(QEvent *e) override
    2. virtual void paintEvent(QPaintEvent *) override

相关代码

#include <QtWidgets>
#define WidgetType QProgressBar
int i=0,j=0;
QList<WidgetType *> widgetList;
QList<QLabel *> labelList;

QCommonStyle cs;

void addFrame(QGridLayout *mainLayout,QWidget *parent){

    WidgetType *widget = new WidgetType(parent);
    widgetList.append (widget);

    QLabel *label = new QLabel(parent);
    labelList.append (label);

    auto *frame = new QFrame(parent);
    frame->setFrameStyle (QFrame::Panel | QFrame::Plain);

    auto *vBox = new QVBoxLayout(frame);
    vBox->addWidget (label,Qt::AlignCenter);
    vBox->addWidget (widget,Qt::AlignCenter);
    mainLayout->addWidget (frame,i,j);
    j++;
}

void setLabelText(int i,QString text){
    if(i >= labelList.count ()){
        return;
    }
    QLabel *label = labelList.at (i);
    label->setText (text);
}

WidgetType* getWidget(int i){
    if(i >= widgetList.count ()){
        qDebug() <<   __LINE__ <<"行 getWidget(int i) 函数 变量"<<    i  << "超出范围";
        i = 0;          // 超出范围默认使用 0
    }
    return  widgetList.at (i);
}

int main(int argc, char *argv[])
{

    QApplication::setStyle (QStyleFactory::create ("windows"));

    QApplication app(argc,argv);

    QMetaObject mo = WidgetType::staticMetaObject;
    app.setApplicationName (mo.className ());

    QDialog w;

    auto *mainLayout = new QGridLayout(&w);

    addFrame (mainLayout,&w);
    addFrame (mainLayout,&w);

//    getWidget (0)->setTextVisible (true);
//    getWidget (1)->setTextVisible (true);

    getWidget (0)->setValue (30);
    getWidget (1)->setValue (30);

    getWidget (0)->setOrientation (Qt::Vertical);
    getWidget (1)->setOrientation (Qt::Vertical);

    setLabelText (0,     "setOrientation (Qt::Horizontal)"    );
    setLabelText (1,     "setOrientation (Qt::Vertical)"    );

//    w.resize (240,50);
    w.show ();

    app.exec();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值