2014-07-07 25 views
0

我想要一個垂直進度條,裏面有垂直(從上到下)文本。我想知道是否以及如何通過樣式表實現這一點。我不能改變整個應用程序的風格,或者完全改變它的部件(沒有「適用於塑料風格的解決方案)。有人能給我提供一些例子嗎?如果你知道任何其他方式來實現它,它也會有幫助。帶樣式表的QProgressBar

回答

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); 
    } 
}; 

這可能是我搞砸了角度,但一般的概念應該是清楚的。

注意,這是更好的方法,因爲:

  • 代碼很簡單
  • 你不破的風格,如果樣式將改變都應該看的填權(不使用硬編碼畫標籤)。
1

我想做到這一點的最好辦法就是要繼承QProgressBar,不使用樣式表

你有一個類似的例子在這裏與QScrollbar,希望這將有助於。)

Draw text on scrollbar

小圓括號,如果您想將樣式表應用於僅一個組件,那麼你必須寫這樣的東西:

widgetType#widgetName 
{ 
    ... 
}