14void QQuickStyleItemProgressBar::connectToControl()
const
16 QQuickStyleItem::connectToControl();
17 auto progressBar = control<QQuickProgressBar>();
18 connect(progressBar, &QQuickProgressBar::fromChanged,
this, &QQuickStyleItem::markImageDirty);
19 connect(progressBar, &QQuickProgressBar::toChanged,
this, &QQuickStyleItem::markImageDirty);
20 connect(progressBar, &QQuickProgressBar::positionChanged,
this, &QQuickStyleItem::markImageDirty);
23StyleItemGeometry QQuickStyleItemProgressBar::calculateGeometry()
25 QStyleOptionProgressBar styleOption;
26 initStyleOption(styleOption);
28 StyleItemGeometry geometry;
29 geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ProgressBar, &styleOption, QSize(0, 0));
32 const int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &styleOption);
33 QFontMetrics fm(control<QQuickProgressBar>()->font());
34 QSize size = QSize(qMax(9, cw) * 7 + fm.horizontalAdvance(QLatin1Char(
'0')) * 4, fm.height() + 8);
35 if (!(styleOption.state & QStyle::State_Horizontal))
36 size = size.transposed();
38 geometry.implicitSize = style()->sizeFromContents(QStyle::CT_ProgressBar, &styleOption, size);
39 styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize);
40 geometry.contentRect = style()->subElementRect(QStyle::SE_ProgressBarContents, &styleOption);
41 geometry.layoutRect = style()->subElementRect(QStyle::SE_ProgressBarLayoutItem, &styleOption);
42 geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ProgressBar, &styleOption, geometry.minimumSize);
47void QQuickStyleItemProgressBar::paintEvent(QPainter *painter)
const
49 QStyleOptionProgressBar styleOption;
50 initStyleOption(styleOption);
52 const QRect r = styleOption.rect;
55 styleOption.rect = style()->subElementRect(QStyle::SE_ProgressBarGroove, &styleOption);
56 style()->drawControl(QStyle::CE_ProgressBarGroove, &styleOption, painter);
59 styleOption.rect = style()->subElementRect(QStyle::SE_ProgressBarContents, &styleOption);
60 style()->drawControl(QStyle::CE_ProgressBarContents, &styleOption, painter);