Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickstyleitemdoublespinbox.cpp
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
6#include <QtQuickTemplates2/private/qquickindicatorbutton_p.h>
7
9
10QFont QQuickStyleItemDoubleSpinBox::styleFont(QQuickItem *control) const
11{
12 return style()->font(QStyle::CE_ComboBoxLabel, controlSize(control));
13}
14
15void QQuickStyleItemDoubleSpinBox::connectToControl() const
16{
17 QQuickStyleItem::connectToControl();
18 auto spinbox = control<QQuickDoubleSpinBox>();
19 connect(spinbox->up(), &QQuickIndicatorButton::pressedChanged, this,
20 &QQuickStyleItem::markImageDirty);
21 connect(spinbox->down(), &QQuickIndicatorButton::pressedChanged, this,
22 &QQuickStyleItem::markImageDirty);
23}
24
25StyleItemGeometry QQuickStyleItemDoubleSpinBox::calculateGeometry()
26{
27 QStyleOptionSpinBox styleOption;
28 initStyleOption(styleOption);
29 StyleItemGeometry geometry;
30
31 geometry.minimumSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, QSize(0, 0));
32
33 if (styleOption.subControls == QStyle::SC_SpinBoxFrame) {
34 geometry.implicitSize =
35 style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, contentSize());
36 styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize);
37 geometry.contentRect = style()->subControlRect(QStyle::CC_SpinBox, &styleOption,
38 QStyle::SC_SpinBoxEditField);
39 geometry.layoutRect = style()->subElementRect(QStyle::SE_SpinBoxLayoutItem, &styleOption);
40 geometry.ninePatchMargins =
41 style()->ninePatchMargins(QStyle::CC_SpinBox, &styleOption, geometry.minimumSize);
42 geometry.focusFrameRadius =
43 style()->pixelMetric(QStyle::PM_SpinBoxFocusFrameRadius, &styleOption);
44 } else {
45 geometry.implicitSize = geometry.minimumSize;
46 }
47
48 return geometry;
49}
50
51void QQuickStyleItemDoubleSpinBox::paintEvent(QPainter *painter) const
52{
53 QStyleOptionSpinBox styleOption;
54 initStyleOption(styleOption);
55 style()->drawComplexControl(QStyle::CC_SpinBox, &styleOption, painter);
56}
57
58void QQuickStyleItemDoubleSpinBox::initStyleOption(QStyleOptionSpinBox &styleOption) const
59{
60 initStyleOptionBase(styleOption);
61 auto spinbox = control<QQuickDoubleSpinBox>();
62
63 switch (m_subControl) {
64 case Frame:
65 styleOption.subControls = QStyle::SC_SpinBoxFrame;
66 styleOption.frame = true;
67 break;
68 case Up:
69 styleOption.subControls = (QStyle::SC_SpinBoxUp | QStyle::SC_SpinBoxDown);
70 break;
71 case Down:
72 styleOption.subControls = QStyle::SC_SpinBoxDown;
73 break;
74 }
75
76 if (spinbox->up()->isPressed()) {
77 styleOption.activeSubControls = QStyle::SC_SpinBoxUp;
78 styleOption.state |= QStyle::State_Sunken;
79 } else if (spinbox->down()->isPressed()) {
80 styleOption.activeSubControls = QStyle::SC_SpinBoxDown;
81 styleOption.state |= QStyle::State_Sunken;
82 }
83
84 styleOption.buttonSymbols = QStyleOptionSpinBox::UpDownArrows;
85 styleOption.stepEnabled = QStyleOptionSpinBox::StepEnabled;
86}
87QT_END_NAMESPACE
88
89#include "moc_qquickstyleitemdoublespinbox.cpp"
Combined button and popup list for selecting options.