38{
40 QStyleOptionButton buttonStyle;
41 buttonStyle.initFrom(this);
42 QRect area = this->style()->subElementRect(QStyle::SE_PushButtonFocusRect, &buttonStyle);
43
44 int totalWidth = area.width();
45
46 QStylePainter painter(this);
47
48 painter.setPen(Qt::transparent);
49 if (style()->objectName() == "breeze") {
50 painter.drawPrimitive(QStyle::PE_PanelButtonCommand, buttonStyle);
51 } else {
52 painter.drawPrimitive(QStyle::PE_Frame, buttonStyle);
53 }
54
55 QColor HL = this->
palette().highlight().color();
56 QColor mid = QColor(220, 220, 0);
57 QColor warn = QColor(220, 0, 0);
58 if (ratioCur>=0.2 && ratioCur<0.4) {
59 qreal newRatio = (ratioCur-0.2)/0.2;
60 qreal negRatio = 1-newRatio;
61 HL.setRed( qMax(0, qMin(int(HL.red()*negRatio) + int(mid.red()*newRatio), 255)));
62 HL.setGreen( qMax(0, qMin(int(HL.green()*negRatio) + int(mid.green()*newRatio), 255)));
63 HL.setBlue( qMax(0, qMin(int(HL.blue()*negRatio) + int(mid.blue()*newRatio), 255)));
64 }
65 else if (ratioCur>=0.4 && ratioCur<0.8) {
66 qreal newRatio = (ratioCur-0.4)/0.4;
67 qreal negRatio = 1-newRatio;
68 HL.setRed( qMax(0, qMin(int(mid.red()*negRatio) + int(warn.red()*newRatio), 255)));
69 HL.setGreen( qMax(0, qMin(int(mid.green()*negRatio) + int(warn.green()*newRatio), 255)));
70 HL.setBlue( qMax(0, qMin(int(mid.blue()*negRatio) + int(warn.blue()*newRatio), 255)));
71 }
72 else if (ratioCur>0.8) {
73 HL = warn;
74 }
75
76 painter.setBrush(HL);
77 QRect currentBytes = area;
78 currentBytes.setWidth(int(ratioCur*totalWidth));
79 painter.setOpacity(0.5);
80
81 painter.drawRoundedRect(currentBytes, 2, 2);
82
84 QRect imageSize = area;
86
87 painter.setOpacity(1.0);
88 painter.drawRoundedRect(imageSize, 2, 2);
89 }
90
91 QPushButton::paintEvent(e);
92
93}
rgba palette[MAX_PALETTE]