Qt 中是否有一个类或方法来获取“border-color”、“border-style”等属性?
这对于基于当前选择的样式表创建和绘制自己的(派生的)控件可能很有用。
示例:
QPushButton {
border: 3px solid red;
background: blue;
margin: 5px;
padding: 10px;
}
编码:
class QPushButtonCircle : public QPushButton {
};
QPushButtonCircle 将是一个圆形按钮。连边框都是圆形的。边框应为 3 像素宽,纯色和红色。背景应该是蓝色的。
我找不到任何方法期望在paintEvent中完全绘制并忽略任何样式表。但必须有更好的方法。
最好的应该是:
QCssStyle cssStyle = widget->...->getCssStyle();
QPen border = cssStyle->border(QCssStyle::Top);
QBrush background = cssStyle->background();
QMargins margins = cssStyle->margins();
QMargins padding = cssStyle->padding();
...
这将允许我们绘制自己的控件,例如:
QStylePainter p(this);
QRect r = rect();
r.adjust(cssStyle->margins().left(), ...);
p.setPen(cssStyle->border());
p.setBrush(cssStyle->brush());
p.drawEllipse(r);
r.adjust(cssStyle->padding().left(), ...);
p.drawText(r, ...);
一个更好的解决方案是使用QStyle::drawControl
, QStyle::drawPrimitive
... 来绘制类似的东西,但尊重 QPainterPath (或更简单的原语)而不是假设矩形控件。
在 Qt 中使用来自样式表的派生颜色创建所有者绘制控件的最佳方法是什么?