30 QStyleOptionButton opt;
31 bool down, tristate, noChange, checked, hovering;
38 opt.state |= QStyle::State_Sunken;
39 if (tristate && noChange)
40 opt.state |= QStyle::State_NoChange;
42 opt.state |= checked ? QStyle::State_On : QStyle::State_Off;
43 if (q->testAttribute(Qt::WA_Hover) && q->underMouse()) {
45 opt.state |= QStyle::State_MouseOver;
47 opt.state &= ~QStyle::State_MouseOver;
51 opt.iconSize = q->size();
58 Qt::LayoutDirection direction;
61 QFontMetrics fontMetrics = widget->fontMetrics();
64 state = QStyle::State_None;
65 if (widget->isEnabled())
66 state |= QStyle::State_Enabled;
67 if (widget->hasFocus())
68 state |= QStyle::State_HasFocus;
69 if (widget->window()->testAttribute(Qt::WA_KeyboardFocusChange))
70 state |= QStyle::State_KeyboardFocusChange;
71 if (widget->underMouse())
72 state |= QStyle::State_MouseOver;
73 if (widget->window()->isActiveWindow())
74 state |= QStyle::State_Active;
75 #ifdef QT_KEYPAD_NAVIGATION
76 if (widget->hasEditFocus())
77 state |= QStyle::State_HasEditFocus;
80 direction = widget->layoutDirection();
81 rect = widget->rect();
82 palette = widget->palette();
83 fontMetrics = widget->fontMetrics();
91 QStyleOptionButton opt;
92 initStyleOption(&opt);
93 p.drawControl(QStyle::CE_CheckBox, opt);
102 QStyleOptionButton *btn;
107 QStyleOptionButton subopt = *btn;
108 subopt.rect = subElementRect(QStyle::SE_CheckBoxIndicator, btn, widget);
109 drawPrimitive(QStyle::PE_IndicatorCheckBox, &subopt, p, widget);
110 subopt.rect = subElementRect(QStyle::SE_CheckBoxContents, btn, widget);
111 drawControl(QStyle::CE_CheckBoxLabel, &subopt, p, widget);
112 if (btn->state & State_HasFocus) {
113 QStyleOptionFocusRect fropt;
114 fropt.QStyleOption::operator=(*btn);
115 fropt.rect = subElementRect(QStyle::SE_CheckBoxFocusRect, btn, widget);
116 drawPrimitive(QStyle::PE_FrameFocusRect, &fropt, p, widget);
122 QStyleOptionButton *opt;
127 const QStyleOptionButton *btn = qstyleoption_cast<
const QStyleOptionButton *>(opt);
128 uint alignment = visualAlignment(btn->direction, Qt::AlignLeft | Qt::AlignVCenter);
129 if (!styleHint(SH_UnderlineShortcut, btn, widget))
130 alignment |= Qt::TextHideMnemonic;
132 QRect textRect = btn->rect;
133 if (!btn->icon.isNull()) {
134 const auto dpr = p->device()->devicePixelRatio();
135 pix = btn->icon.pixmap(btn->iconSize, dpr,
136 btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled);
137 drawItemPixmap(p, btn->rect, alignment, pix);
138 if (btn->direction == Qt::RightToLeft)
139 textRect.setRight(textRect.right() - btn->iconSize.width() - 4);
141 textRect.setLeft(textRect.left() + btn->iconSize.width() + 4);
143 if (!btn->text.isEmpty()){
144 drawItemText(p, textRect, alignment | Qt::TextShowMnemonic,
145 btn->palette, btn->state & State_Enabled, btn->text, QPalette::WindowText);