QProgressBar Class
QProgressBar小部件提供水平或垂直进度条。
| Header | #include < QProgressBar > |
|---|---|
| qmake | QT += widgets |
| Inherits | QWidget |
| Inherited By |

详细说明

进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行。
进度条使用步骤的概念。您可以通过指定最小和最大可能的步长值来设置它,当您稍后为它指定当前步长值时,它将显示已完成的步长百分比。百分比的计算方法是将进度(value() -minimum() )除以maximum() -minimum() 。
可以使用setMinimum() 和setMaximum指定最小和最大步数。当前步数是用setValue() 设置的。可以使用reset() 将进度条倒转到开头。
如果“minimum”和“maximum”都设置为0,则条形图将显示忙碌指示器,而不是步长百分比。例如,当使用QNetworkAccessManager下载无法确定要下载的项目大小的项目时,这非常有用。

公共类型
enum Direction
指定垂直进度条文本的读取方向。
| Constant | Value | Description |
|---|---|---|
| QProgressBar::TopToBottom | 0 | 文本顺时针旋转90度。 |
| QProgressBar::BottomToTop | 1 | 文本逆时针旋转90度。 |
请注意,是否绘制文本取决于样式。当前CleanLooks和Plastique绘制文本。Mac、Windows和WindowsVista样式不支持。
属性
-
alignment: Qt::Alignment 进度条的对齐方式
Access functions:
- Qt::Alignment alignment() const
- void setAlignment(Qt::Alignment alignment)
-
format: QString 用于生成当前文本的字符串
%p–由完成百分比代替。%v–被当前值替换。%m–替换为总步数。
默认值为“%p%”。
Access functions:
- QString format() const
- void setFormat(const QString &format)
- void resetFormat()
-
invertedAppearance: bool 进度条是否显示其进度
如果此属性为true,则进度条会向另一个方向(例如从右向左)增长。默认情况下,进度条不会反转。Access functions:
- bool invertedAppearance() const
- void setInvertedAppearance(bool invert)

-
maximum: int 最大值
Access functions:
- int maximum() const
- void setMaximum(int maximum)
-
minimum: int 最小值
Access functions:
- int minimum() const
- void setMinimum(int minimum)
-
orientation: Qt::Orientation 进度条的方向
方向必须是Qt::Horizontal(默认值)或Qt::Vertical。
Access functions:
- Qt::Orientation orientation() const
- void setOrientation(Qt::Orientation)

-
text: const QString 与进度条一起显示的描述性文本
返回的文本与进度条中心(或某些样式的左侧)显示的文本相同。
文本中显示的进度可能小于最小值,表示在设置任何进度之前,进度条处于“重置”状态。
在默认实现中,文本要么包含一个百分比值,表示到目前为止的进度,要么为空,因为进度条处于重置状态。Access functions:
- virtual QString text() const
-
textDirection: Direction 垂直进度条文本的读取方向
此属性对水平进度条没有影响。默认情况下,读取方向是QProgressBar::toptobttom。Access functions:
- void setOrientation(Qt::Orientation)
- virtual QString text() const
-
textVisible: bool 是否应显示当前完成百分比
样式可能会忽略此属性(例如,QMacStyle从不绘制文本)。
Access functions:
- bool isTextVisible() const
- void setTextVisible(bool visible)
-
value: int 进度条的当前值
尝试将当前值更改为超出最小-最大范围的值对当前值没有影响。Access functions:
- int value() const
- void setValue(int value)
Notifier signal:
- void valueChanged(int value)
公共函数
构造和析构
- QProgressBar(QWidget *parent = nullptr)
- virtual ~QProgressBar()
属性相关
- Qt::Alignment alignment() const
- void setAlignment(Qt::Alignment alignment)
- QString format() const
- void setFormat(const QString &format)
- void resetFormat()
- bool invertedAppearance() const
- void setInvertedAppearance(bool invert)
- int maximum() const
- void setMaximum(int maximum)
- int minimum() const
- void setMinimum(int minimum)
- Qt::Orientation orientation() const
- void setOrientation(Qt::Orientation)
- virtual QString text() const
- QProgressBar::Direction textDirection() const
- void setTextDirection(QProgressBar::Direction textDirection)
- bool isTextVisible() const
- void setTextVisible(bool visible)
- int value() const
- void setValue(int value)
重写的公共函数
-
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; } -
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); }公共槽
- void reset()
- void setMaximum(int maximum)
- void setMinimum(int minimum)
- void setOrientation(Qt::Orientation)
- void setRange(int minimum, int maximum)
- void setValue(int value)
信号
- void valueChanged(int value)
受保护的函数
- void initStyleOption(QStyleOptionProgressBar *option) const
重写的受保护的函数
- virtual bool event(QEvent *e) override
- 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;
}
本文详细介绍了Qt中的QProgressBar组件,包括其enumDirection枚举、属性设置(如对齐、格式、范围等)、文本显示、构造与析构,以及如何重写关键函数和槽信号。实例演示了如何创建和定制不同方向、格式的进度条,适用于进度指示和下载管理等场景。
624

被折叠的 条评论
为什么被折叠?



