2017-10-09 2 views
0

Je possède ce lecteur audio qui, faute d'un meilleur widget utilise QProgressBars pour afficher le volume global et le volume de chaque bac RTA, en plus de choisir une gamme de bacs « intéressants »:Comment centrer un bloc QProgressBar?

enter image description here

Le widget parent a une feuille de style de "background-color: DimGray;"; Je ne sais pas si cela a quelque chose à voir avec le problème ou non. Les ProgressBars sont eux-mêmes mis en place comme ceci:

AudioMeter::AudioMeter(..., QWidget* parent) : 
    QWidget(parent) 
{ 
    ... 
    meter = new QProgressBar(this); 
    meter->setOrientation(Qt::Vertical); 
    meter->setFormat(""); 
    meter->setGeometry(...); 
    meter->setRange(FixedPoint::Zero, FixedPoint::One); 
} 

et utilisés comme ceci:

void AudioMeter::setValue(int value) 
{ 
    meter->setValue(value); 
} 

Le problème est que les morceaux (en bleu clair) semblent être décalé à gauche par quelques pixels et en hausse d'un ou deux, donc ça n'a pas l'air juste. Ceci est vrai sur Lubuntu 16.04 LTS (photo) et sur Ubuntu 16.04 LTS. Comment puis-je les centrer?


Ou s'il y a un meilleur widget à utiliser (avec le code simple, pas une chose personnalisée avec 20 méthodes réimplémenté comme je l'ai vu dans quelques exemples), je suis ouvert à cela aussi.

Répondre

1

http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qprogressbar

http://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qprogressbar

http://doc.qt.io/qt-5/stylesheet-customizing.html#the-box-model

Qt Stylesheet Box Model

https://www.w3schools.com/css/css_padding.asp

Il semble que le rembourrage droit est probablement hors pour une raison quelconque.

// try this and see if it helps 
meter->setStyleSheet("padding: 0;"); 
// or just zero out the right padding 
meter->setStyleSheet("padding-right: 0;"); 

Sinon, vous aurez probablement besoin de faire quelques itérations de l'édition stylesheet ...

Utilisez un fichier stylesheet.css dans le même chemin que votre programme:

http://doc.qt.io/qt-5/qapplication.html#QApplication

Feuille de style

-stylesheet=, définit la feuille de style de l'application. La valeur doit être un chemin d'accès à un fichier contenant la feuille de style.

Vous exécutez votre programme avec

meters -stylesheet=./stylesheet.css 

et remplissez stylesheet.css avec:

QProgressBar { 
    /* attempt at fix by removing all padding */ 
    padding: 0; 
    /* Another style to try out sometime: 
QProgressBar { 
    border: 2px solid grey; 
    border-radius: 5px; 
} 

QProgressBar::chunk { 
    background-color: #05B8CC; 
    width: 20px; 
}*/ 
} 

J'ai aussi fait le prototypage de feuilles de style en le connectant est reload à une large application hotkey ou un bouton-poussoir dans votre programme.

QString stylesheet; 
QFile f("stylesheet.css"); 
if (f.open(QFile::ReadOnly | QFile::Text)) 
{ 
    QTextStream in(&f); 
    stylesheet = in.readAll(); 
} 
qApp->setStyleSheet(stylesheet); 
qApp->style()->unpolish(qApp); 
qApp->style()->polish(qApp); 

Espérons que ça aide.

+0

En fait, c'était le 'border' qui l'a fait, pas le' padding', mais vous étiez sur la bonne voie.+1 et peut-être un accepter. – AaronD