带有样式表的 QProgressBar
Posted
技术标签:
【中文标题】带有样式表的 QProgressBar【英文标题】:QProgressBar with StyleSheet 【发布时间】:2014-07-07 14:36:26 【问题描述】:我想要一个带有垂直(从上到下)文本的垂直进度条。我想知道是否以及如何使用样式表来实现这一点。我无法更改整个应用程序的样式或完全更改小部件的样式(没有“应用塑料样式解决方案可用”)。有人可以提供一些示例吗?如果您知道任何其他方法来实现这一点,它也会有所帮助.
【问题讨论】:
【参考方案1】:建议的答案太复杂了。它可以以更简单的方式完成(更少的代码)。
首先你应该继承QProxyStyle。 这应该或多或少像这样(覆盖drawControl):
class MyProxyStyle : public QProxyStyle
public:
void QStyle::drawControl(ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0) const
if (element == CE_ProgressBarLabel)
// create coppy of style option:
QStyleOptionProgressBar op(*static_cast<QStyleOptionProgressBar*>(option));
// prepare style option for rotation
op.rect = QTransform().rotate(-90).mapRect(op.rect);
// optional: op.orientation = (op.orientation==Qt::Horizontal)?Qt::Vertical:Qt::Horizontal;
painter->rotate(90); // rotate painter
QProxyStyle::drawControl(element, &op, painter, widget);
painter->rotate(-90); // restore painter state - its a must
return;
QProxyStyle::drawControl(element, option, painter, widget);
;
我可能搞砸了角度,但总体概念应该很清楚。
请注意,这是更好的方法,因为:
代码很简单 您不要破坏样式,如果样式将被更改,所有内容都应该看起来是正确的(您没有使用硬编码的标签绘画)。【讨论】:
【参考方案2】:我认为最好的方法是继承 QProgressBar,而不是使用样式表。
你在这里有一个与 QScrollbar 类似的例子,希望它会有所帮助;)
Draw text on scrollbar
一个小括号,如果你想将一个样式表只应用到一个组件,你必须这样写:
widgetType#widgetName
...
【讨论】:
以上是关于带有样式表的 QProgressBar的主要内容,如果未能解决你的问题,请参考以下文章
xsl 在带有样式表的 Multiple 的 xml 文档上创建