Установите ширину QScrollbar, чтобы избежать необходимости горизонтальной полосы прокрутки - PullRequest
2 голосов
/ 30 января 2012

Есть ли способ установить ширину QScrollArea, чтобы горизонтальная полоса прокрутки не нужна?Я знаю, что могу скрыть горизонтальную полосу прокрутки, установив ее политику всегда выключенной.Однако я хочу сделать QScrollArea достаточно большим, чтобы он не требовался.

В настоящее время я делаю это с помощью scrollbar.setFixedWidth().Есть ли лучший способ с чем-то вроде scrollbar.setSizetoContents() или чем-то похожим?

В качестве примечания, как лучше всего получить максимальную ширину всех виджетов в макете?

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Похоже, QScrollArea.setWidgetResizable может делать то, что вы хотите.Но это, вероятно, будет зависеть от того, какие виджеты содержит область прокрутки.

См. Также раздел Подсказки по размеру и макеты .

1 голос
/ 31 января 2012

Я наконец понял это.Вот хакерский код, который я использовал, чтобы узнать ширину одного из моих подвиджетов в scrollarea:

def _restrictWidthToFit(self):
    layout = self._scroll.widget().layout()
    if layout.count() > 0:
        fw = layout.itemAt(0).widget().sizeHint().width()
        sw = self._scroll.verticalScrollBar().sizeHint().width()
        w = fw + sw
        return w

Хитрость заключалась в том, что я ранее устанавливал эту ширину при первом добавлении виджетов в scrollarea.,Тем не менее, на данный момент размеры не полностью заполнены Qt.Таким образом, я использовал вышеописанный метод, чтобы установить ширину, переопределив showEvent ():

def showEvent(self, ev):
    super(UIFilterCollection, self).showEvent(ev)
    self._scroll.setFixedWidth(self._restrictWidthToFit())

В этот момент ширина заполнена, поэтому, похоже, она работает.

Это также стоитотмечая, что все мои подвиджеты уже имеют одинаковую ширину, так как они находятся в

...