QSt QVBoxLayout’s addStretch strech занимает слишком много места (из макета)

У меня есть QVBoxLayout, который имеет QSCrollArea и с addStretch (), добавленным в его конец.

QScrollArea здесь использует только половину доступного пространства, даже если есть свободное место внизу, в настоящее время занимаемое addStretch.

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

Тем не менее, в настоящее время для небольшого QScrollArea это работает, но когда содержимое QScrollArea больше, оно расширяется только до половины доступного пространства.

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

Какой трюк, чтобы разобраться в этом?

Вот фрагмент моего кода [на Python, но ответы на C ++ приветствуются]:

# My setup
self.layout = QVBoxLayout()
self.setLayout(self.layout)

scrollArea = QScrollArea()
self.layout.addWidget(scrollArea)
scrollArea.setWidgetResizable(True)
scrollArea.setEnabled(True)

self.scrollWidget = QWidget()
self.scrollLayout = QVBoxLayout()
self.scrollWidget.setLayout(self.scrollLayout)

scrollArea.setWidget(self.scrollWidget)

# Now what I do is, I add bunch of widgets inside the self.scrollLayout
# and in the end, I perform a self.layout.addStretch() to push them up (verticle Alignment does same)
# Maximum height QScrollArea (scrollArea) gets is stuck at around 50% although I want to take all the space if necessary

Я добавил ВСЕ возможные параметры setSizePolicy (..)

scrollArea.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
# and ALL others. None works. addStretch() still takes 50% minimum space and gets even more if QScrollArea's contents are smaller.

1

Решение

У меня была та же самая проблема, и я думаю, что нашел решение. Не добавляйте растяжку после QScrollArea, но как последний элемент в макете QScrollArea. Так что в вашем коде используйте self.scrollLayout.addStretch() вместо self.layout.addStretch(),

1

Другие решения

Я нашел решение.
Необходимо переопределить sizeHint для удержания прокручиваемого виджета scrollarea.
Необходимо установить максимальную высоту прокручиваемого виджета.
И необходимо поместить этот виджет в QVBoxLayout с помощью addStretch (), которая выдвигает его наверх.

1

Когда содержимое QScrollArea меньше, я хочу уменьшить размер QScrollArea
до этого размера, с остальным доступным пространством, используемым addStetch.

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

Если содержимое больше, чем QScrollArea, оно займет все доступное пространство.

Я думаю, это то, что вам нужно.

0
По вопросам рекламы [email protected]