2010-08-01 22 views
6

Jak ukryć paski przewijania w trybie QScrollArea? Obecnie używam metody hide() na paskach przewijania zwróconych przez QScrollArea::horizontalScrollBar() i QScrollArea::verticalScrollBar(), ale miejsce zarezerwowane dla pasków przewijania nadal pozostaje. Oczywiście wygląda to bardzo brzydko i nie jest wydajne. Jeśli całkowicie usunę paski przewijania, nie będzie już można łatwo przewinąć do określonego punktu przy użyciu QScrollBar::setValue().Jak ukryć pasek przewijania w QScrollArea?

Odpowiedz

14

użyć tego kodu:

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

Jeśli zrobię to w ten sposób, nie mogę już przewijać do określonego punktu przy użyciu QScrollBar :: setValue() (ponieważ paski przewijania nie istnieją) – pafcu

+3

Jeśli potrzebujesz paska przewijania, kiedy jest to konieczne, użyj zasad: Qt :: ScrollBarAsNeeded. Jeśli chcesz przewinąć zawartość programową, użyj QAbstractScrollArea :: scrollContentsBy (int dx, int dy) –

+1

[Apparenly] (http://doc.qt.io/qt-5/qabstractscrollarea.html#scrollContentsBy) powinieneś zadzwonić do paska przewijania 'setValue()' zamiast 'scrollContentsBy()'. – Schollii

1

Ten fragment kodu może wykonać zadanie:

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

Od Qt documents dla scrollContentsBy():

Wywołanie tej funkcji w celu przewijania programowo jest błędem, użyj zamiast tego pasków przewijania (np. bezpośrednio wywołując QScrollBar :: setValue()).

14

Można go ukryć za pomocą arkusza stylów. Użyj height:0px;, aby ukryć poziomy pasek przewijania i width=0px;, aby ukryć pionowy pasek przewijania. tak:

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

i voila .no paski przewijania, i nadal można manipulować nimi za pomocą setValue()!.

I tak, myślałem przez 3 lata odpowiedzi. Więc mogę wreszcie kupić sobie przekąski.