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中创建所有者绘制控件的最佳方法是什么?
答案 0 :(得分:0)
我发现没有任何方法可以期望在paintEvent中绘制,并忽略任何样式表。但必须有更好的方法。
Qt中的小部件是矩形,不能有任何其他形状。看看box model。因此,任何其他方式都将与您尝试使用的方式一样棘手。
There is a suggestion使用QGraphicView。
编辑:
我从未尝试过自己,但您可以尝试使用QBitmap
或QRegion
设置所需形状的mask on top of the button。可以通过更新样式表来设置其他css
元素(颜色等)。如果您能够使用它,那么您知道解决方案的麻烦就更少了,因为您不需要处理自定义绘制事件。