在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中创建从样式表派生颜色的自绘控件的最佳方法是什么?
stylesheet
属性不是完整的计算样式:父级和qApp也会影响。这可能是向Qt开发人员提出功能请求的原因... - NIA