2014-07-07 3 views
0

Je voudrais avoir une barre de progression verticale avec du texte vertical (de haut en bas) à l'intérieur. Je me demande si et comment cela peut-il être réalisé avec des feuilles de style. Je ne peux pas changer le style de l'application entière ou la changer complètement pour le widget (pas de "appliquer une solution de style plastique disponible.) Quelqu'un pourrait-il me donner un exemple? Si vous connaissez un autre moyen d'y parvenir, il sera utile aussi .QProgressBar avec StyleSheet

Répondre

1

La réponse proposée est compliquée. Cela peut être fait de manière beaucoup plus simple (moins de code).

Tout d'abord vous devriez sous-classe QProxyStyle. Cela devrait être fait plus ou moins comme ça (remplacer 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); 
    } 
}; 

Il est possible que je l'ai foiré avec des angles, mais concept général devrait être clair.

Notez que ceci est bien meilleure approche depuis:

    Code
  • est simple
  • vous ne cassez pas le style, si le style sera changé tout devrait regarder un droit de remplissage (vous n'utilisez pas la peinture codée en dur d'étiquette).
1

Je pense que la meilleure façon de le faire est juste de sous-classe QProgressBar, ne pas utiliser stylesheet Vous

ont un exemple similaire ici avec QScrollBar, espérons que cela vous aidera;.)

Draw text on scrollbar

Petite parenthèse, si vous souhaitez appliquer une feuille de style à un seul composant, yo vous devez écrire quelque chose comme ceci:

widgetType#widgetName 
{ 
    ... 
}