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?
6
A
Odpowiedz
14
użyć tego kodu:
QAbstractScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
QAbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
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.
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
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) –
[Apparenly] (http://doc.qt.io/qt-5/qabstractscrollarea.html#scrollContentsBy) powinieneś zadzwonić do paska przewijania 'setValue()' zamiast 'scrollContentsBy()'. – Schollii