2010-08-01 15 views
6

¿Cómo se pueden ocultar las barras de desplazamiento en un QScrollArea? Actualmente uso el método hide() en las barras de desplazamiento devueltas por QScrollArea::horizontalScrollBar() y QScrollArea::verticalScrollBar() pero el espacio reservado para las barras de desplazamiento aún permanece. Obviamente, esto se ve muy feo y no es eficiente en el uso del espacio. Si elimino las barras de desplazamiento por completo ya no puedo desplazarme fácilmente a un punto específico usando QScrollBar::setValue().¿Cómo ocultar la barra de desplazamiento en QScrollArea?

Respuesta

14

Usar este código:

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

Si lo hago así, ya no puedo desplazarme a un punto específico usando QScrollBar :: setValue() (porque las barras de desplazamiento no existen) – pafcu

+3

Si necesita una barra de desplazamiento cuando sea necesario, use la política: Qt :: ScrollBarAsNeeded. Si desea desplazarse por el contenido programático, use QAbstractScrollArea :: scrollContentsBy (int dx, int dy) –

+1

[Apparenly] (http://doc.qt.io/qt-5/qabstractscrollarea.html#scrollContentsBy) debe llamar a la barra de desplazamiento 'setValue()' en lugar de 'scrollContentsBy()'. – Schollii

1

Esta pieza de código puede hacer el trabajo:

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

De Qt documents para scrollContentsBy():

llama a esta función con el fin de desplazarse mediante programación es un error, utilice las barras de desplazamiento en su lugar (por ejemplo, llamando directamente a QScrollBar :: setValue()).

14

Puede ocultarlo con una hoja de estilo. Utilice height:0px; para ocultar la barra de desplazamiento horizontal y width=0px; para ocultar la barra de desplazamiento vertical. Al igual que :

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

y listo barras de desplazamiento .No, y todavía se puede manipularlos utilizando setValue()!.

Y sí, estuve pensando durante 3 años de una respuesta. Así que finalmente puedo comprar algunos bocadillos.

Cuestiones relacionadas