📄 arthurstyle.cpp
字号:
bottom.setWidth(r.width() - bottomLeft.width() - bottomRight.width()); bottom.setHeight(bottomLeft.height()); painter->drawTiledPixmap(bottom, bottomStretch); painter->restore(); } break; default: QWindowsStyle::drawPrimitive(element, option, painter, widget); break; } return;}void ArthurStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const{ switch (control) { case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) { QRect groove = subControlRect(CC_Slider, option, SC_SliderGroove, widget); QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget); painter->save(); bool hover = (slider->state & State_Enabled) && (slider->state & State_MouseOver); if (hover) { QRect moderated = widget->rect().adjusted(0, 4, 0, -4); drawHoverRect(painter, moderated); } if ((option->subControls & SC_SliderGroove) && groove.isValid()) { QPixmap grv = cached(":res/images/slider_bar.png"); painter->drawPixmap(QRect(groove.x() + 5, groove.y(), groove.width() - 10, grv.height()), grv); } if ((option->subControls & SC_SliderHandle) && handle.isValid()) { QPixmap hndl = cached(":res/images/slider_thumb_on.png"); painter->drawPixmap(handle.topLeft(), hndl); } painter->restore(); } break; case CC_GroupBox: if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast<const QStyleOptionGroupBox *>(option)) { QStyleOptionGroupBox groupBoxCopy(*groupBox); groupBoxCopy.subControls &= ~SC_GroupBoxLabel; QWindowsStyle::drawComplexControl(control, &groupBoxCopy, painter, widget); if (groupBox->subControls & SC_GroupBoxLabel) { const QRect &r = groupBox->rect; QPixmap titleLeft = cached(":res/images/title_cap_left.png"); QPixmap titleRight = cached(":res/images/title_cap_right.png"); QPixmap titleStretch = cached(":res/images/title_stretch.png"); int txt_width = groupBox->fontMetrics.width(groupBox->text) + 20; painter->drawPixmap(r.center().x() - txt_width/2, 0, titleLeft); QRect tileRect = subControlRect(control, groupBox, SC_GroupBoxLabel, widget); painter->drawTiledPixmap(tileRect, titleStretch); painter->drawPixmap(tileRect.x() + tileRect.width(), 0, titleRight); int opacity = 31; painter->setPen(QColor(0, 0, 0, opacity)); painter->drawText(tileRect.translated(0, 1), Qt::AlignVCenter | Qt::AlignHCenter, groupBox->text); painter->drawText(tileRect.translated(2, 1), Qt::AlignVCenter | Qt::AlignHCenter, groupBox->text); painter->setPen(QColor(0, 0, 0, opacity * 2)); painter->drawText(tileRect.translated(1, 1), Qt::AlignVCenter | Qt::AlignHCenter, groupBox->text); painter->setPen(Qt::white); painter->drawText(tileRect, Qt::AlignVCenter | Qt::AlignHCenter, groupBox->text); } } break; default: QWindowsStyle::drawComplexControl(control, option, painter, widget); break; } return;}QRect ArthurStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const{ QRect rect; switch (control) { default: rect = QWindowsStyle::subControlRect(control, option, subControl, widget); break; case CC_GroupBox: if (const QStyleOptionGroupBox *group = qstyleoption_cast<const QStyleOptionGroupBox *>(option)) { switch (subControl) { default: rect = QWindowsStyle::subControlRect(control, option, subControl, widget); break; case SC_GroupBoxContents: rect = QWindowsStyle::subControlRect(control, option, subControl, widget); rect.adjust(0, -8, 0, 0); break; case SC_GroupBoxFrame: rect = group->rect; break; case SC_GroupBoxLabel: QPixmap titleLeft = cached(":res/images/title_cap_left.png"); QPixmap titleRight = cached(":res/images/title_cap_right.png"); QPixmap titleStretch = cached(":res/images/title_stretch.png"); int txt_width = group->fontMetrics.width(group->text) + 20; rect = QRect(group->rect.center().x() - txt_width/2 + titleLeft.width(), 0, txt_width - titleLeft.width() - titleRight.width(), titleStretch.height()); break; } } break; } if (control == CC_Slider && subControl == SC_SliderHandle) { rect.setWidth(13); rect.setHeight(27); } else if (control == CC_Slider && subControl == SC_SliderGroove) { rect.setHeight(9); rect.moveTop(27/2 - 9/2); } return rect;}QSize ArthurStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const{ QSize newSize = QWindowsStyle::sizeFromContents(type, option, size, widget); switch (type) { case CT_RadioButton: newSize += QSize(20, 0); break; case CT_PushButton: newSize.setHeight(26); break; case CT_Slider: newSize.setHeight(27); break; default: break; } return newSize;}int ArthurStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QWidget *widget) const{ if (pm == PM_SliderLength) return 13; return QWindowsStyle::pixelMetric(pm, opt, widget);}void ArthurStyle::polish(QWidget *widget){ if (widget->layout() && qobject_cast<QGroupBox *>(widget)) { if (qFindChildren<QGroupBox *>(widget).size() == 0) { widget->layout()->setSpacing(0); widget->layout()->setMargin(12); } else { widget->layout()->setMargin(13); } } if (qobject_cast<QPushButton *>(widget) || qobject_cast<QRadioButton *>(widget) || qobject_cast<QSlider *>(widget)) { widget->setAttribute(Qt::WA_Hover); } QPalette pal = widget->palette(); if (widget->isWindow()) { pal.setColor(QPalette::Background, QColor(241, 241, 241)); widget->setPalette(pal); }}void ArthurStyle::unpolish(QWidget *widget){ if (qobject_cast<QPushButton *>(widget) || qobject_cast<QRadioButton *>(widget) || qobject_cast<QSlider *>(widget)) { widget->setAttribute(Qt::WA_Hover, false); }}void ArthurStyle::polish(QPalette &palette){ palette.setColor(QPalette::Background, QColor(241, 241, 241));}QRect ArthurStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const{ QRect r; switch(element) { case SE_RadioButtonClickRect: r = widget->rect(); break; case SE_RadioButtonContents: r = widget->rect().adjusted(20, 0, 0, 0); break; default: r = QWindowsStyle::subElementRect(element, option, widget); break; } if (qobject_cast<const QRadioButton*>(widget)) r = r.adjusted(5, 0, -5, 0); return r;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -