2010-08-01 20 views
6

Come nascondere le barre di scorrimento in un QScrollArea? Attualmente utilizzo il metodo hide() sulle barre di scorrimento restituite da QScrollArea::horizontalScrollBar() e QScrollArea::verticalScrollBar() ma lo spazio riservato alle barre di scorrimento rimane ancora. Ovviamente questo sembra molto brutto e non è efficiente nello spazio. Se rimuovo del tutto le scrollbar non riesco più a scorrere facilmente fino a un punto specifico usando QScrollBar::setValue().Come nascondere la barra di scorrimento in QScrollArea?

risposta

14

di questo codice:

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

Se faccio così non posso più scorrere verso un punto specifico usando QScrollBar :: setValue() (perché le barre di scorrimento non esistono) – pafcu

+3

Se è necessaria una barra di scorrimento quando necessario, utilizzare la politica: Qt :: ScrollBarAsNeeded. Se si desidera scorrere il contenuto programmatico, utilizzare QAbstractScrollArea :: scrollContentsBy (int dx, int dy) –

+1

[Apparenly] (http://doc.qt.io/qt-5/qabstractscrollarea.html#scrollContentsBy) si dovrebbe chiamare scrollbar's 'setValue()' invece di 'scrollContentsBy()'. – Schollii

1

Questo pezzo di codice può fare il lavoro:

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

Da Qt documents per scrollContentsBy():

chiamata a questa funzione, al fine di passare a livello di codice è un errore, usa invece le barre di scorrimento (ad es. chiamando direttamente QScrollBar :: setValue()).

14

È possibile nasconderlo utilizzando un foglio di stile. Utilizzare height:0px; per nascondere la barra di scorrimento orizzontale e width=0px; per nascondere la barra di scorrimento verticale. Come quella:

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

E voilà barre di scorrimento .no, ed è ancora possibile manipolarli utilizzando setValue()!.

E sì, stavo pensando per 3 anni di una risposta. Così finalmente posso comprarmi degli snack.

Problemi correlati