C++ 带有样式表的QProgressBar

C++ 带有样式表的QProgressBar,c++,css,qt,C++,Css,Qt,我想有一个垂直的进度条,里面有垂直(从上到下)的文本。我想知道是否以及如何通过样式表实现这一点。我不能更改整个应用程序的样式,也不能完全更改小部件的样式(没有“apply plastic style solution available”)。有人能给我举个例子吗?如果你知道实现这一点的任何其他方法,它也会很有帮助。我认为最好的方法就是对QProgressBar进行子类化,而不是使用样式表 这里有一个类似的QScrollbar示例,希望对您有所帮助;) 一个小括号,如果只想将样式表应用于一个组件

我想有一个垂直的进度条,里面有垂直(从上到下)的文本。我想知道是否以及如何通过样式表实现这一点。我不能更改整个应用程序的样式,也不能完全更改小部件的样式(没有“apply plastic style solution available”)。有人能给我举个例子吗?如果你知道实现这一点的任何其他方法,它也会很有帮助。

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

这里有一个类似的QScrollbar示例,希望对您有所帮助;)

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

widgetType#widgetName
{
    ...
}

建议的答案很复杂。它可以用更简单的方式(更少的代码)完成

首先,您应该创建子类。 这样做或多或少应该是这样的(覆盖):

class MyProxyStyle:公共QProxyStyle
{
公众:
void QStyle::drawControl(ControlElement元素,常量QStyleOption*选项,qPaint*画师,常量QWidget*小部件=0)常量
{
if(元素==CE\U ProgressBarLabel){
//创建样式的铜杯选项:
QStyleOptionProgressBar操作(*静态施法(选项));
//准备旋转的样式选项
op.rect=QTransform().rotate(-90).mapRect(op.rect);
//可选:op.orientation=(op.orientation==Qt::Horizontal)?Qt::Vertical:Qt::Horizontal;
画师->旋转(90);//旋转画师
QProxyStyle::drawControl(元素、操作、画师、小部件);
画师->旋转(-90);//恢复画师状态-这是必须的
返回;
}
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);
    }
};