У меня есть 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.
У меня была та же самая проблема, и я думаю, что нашел решение. Не добавляйте растяжку после QScrollArea, но как последний элемент в макете QScrollArea. Так что в вашем коде используйте self.scrollLayout.addStretch()
вместо self.layout.addStretch()
,
Я нашел решение.
Необходимо переопределить sizeHint для удержания прокручиваемого виджета scrollarea.
Необходимо установить максимальную высоту прокручиваемого виджета.
И необходимо поместить этот виджет в QVBoxLayout с помощью addStretch (), которая выдвигает его наверх.
Когда содержимое QScrollArea меньше, я хочу уменьшить размер QScrollArea
до этого размера, с остальным доступным пространством, используемым addStetch.
Если содержимое QScrollArea невелико, вы можете выровнять его по верху и скрыть вертикальную полосу прокрутки. В этом случае вам не нужно добавлять растяжение в основной вертикальный макет.
Если содержимое больше, чем QScrollArea, оно займет все доступное пространство.
Я думаю, это то, что вам нужно.