带有StyleSheet的QProgressBar

时间:2014-07-07 14:36:26

标签: c++ css qt

我希望有一个垂直进度条,里面有垂直(从上到下)的文本。我想知道是否以及如何通过样式表实现这一目标。我不能改变整个应用程序的样式或完全改变它的小部件(没有"应用塑料样式解决方案可用)。有人可以给我一些例子吗?如果你知道任何其他方法来实现这一点,它也会有所帮助。

2 个答案:

答案 0 :(得分:1)

我认为最好的方法就是将QProgressBar子类化,而不是使用样式表。

这里有一个与QScrollbar类似的例子,希望它会有所帮助;)

Draw text on scrollbar

一个小括号,如果要将样式表仅应用于一个组件,则必须编写如下内容:

widgetType#widgetName
{
    ...
}

答案 1 :(得分: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);
    }
};

我可能已经搞砸了角度,但一般概念应该是明确的。

请注意,这是更好的方法,因为:

  • 代码很简单
  • 你不破坏风格,如果风格会改变,所有应该看起来是正确的填充(你没有使用硬编码的标签画)。