2010-08-01 5 views
6

Comment peut-on cacher les barres de défilement dans un QScrollArea? Actuellement j'utilise la méthode hide() sur les barres de défilement retournées par QScrollArea::horizontalScrollBar() et QScrollArea::verticalScrollBar() mais l'espace réservé pour les barres de défilement reste toujours. Évidemment, cela semble très laid et n'est pas efficace dans l'espace. Si je supprime complètement les barres de défilement, je ne peux plus facilement faire défiler vers un point spécifique en utilisant QScrollBar::setValue().Comment masquer la barre de défilement dans QScrollArea?

Répondre

14

Utilisez ce code:

QAbstractScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff) 
QAbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff) 
+1

Si je le fais de cette manière je ne peux plus défiler vers un point spécifique en utilisant QScrollBar :: setValue() (parce que les barres de défilement n'existent pas) – pafcu

+3

Si vous avez besoin d'une barre de défilement si nécessaire, utilisez la politique: ScrollBarAsNeeded. Si vous voulez faire défiler le contenu programmatique, utilisez QAbstractScrollArea :: scrollContentsBy (int dx, int dy) –

+1

[Apparemment] (http://doc.qt.io/qt-5/qabstractscrollarea.html#scrollContentsBy) vous devriez appeler les barres de défilement 'setValue()' au lieu de 'scrollContentsBy()'. – Schollii

1

Ce morceau de code peut faire le travail:

setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
verticalScrollBar()->hide(); 
verticalScrollBar()->resize(0, 0); 
1

De Qt documents pour scrollContentsBy():

appel de cette fonction afin de faire défiler par programmation est une erreur, utilisez plutôt les barres de défilement (par exemple en appelant directement QScrollBar :: setValue()).

14

Vous pouvez le masquer en utilisant une feuille de style. Utilisez height:0px; pour masquer la barre de défilement horizontale et width=0px; pour masquer la barre de défilement verticale. Comme ça:

horizontalScrollBar()->setStyleSheet("QScrollBar {height:0px;}"); 
verticalScrollBar()->setStyleSheet("QScrollBar {width:0px;}"); 

Et le tour est joué .Pas barres de défilement, et vous pouvez toujours les manipuler en utilisant setValue()!.

Et oui, je pensais à 3 ans de réponse. Donc, je peux enfin m'acheter des collations.

Questions connexes