У меня был настоящий вызов получить QScrollArea
, чтобы взять минимальное возможное пространство до максимальной высоты.QScrollArea vertical sizePolicy - размер до максимальной высоты
Моя модель графического интерфейса выглядит следующим образом: A QScrollArea
содержит вертикальную компоновку, которая заполнена виджетами класса TableRow
. Я хочу, чтобы этот класс TableRow
занимал минимальную возможную высоту. Он имеет вид сверху, который всегда виден, и QScrollArea
, внизу которого есть ярлык внутри, чья видимость может быть переключена. Метка предназначена для заметок, которые могут быть 0 символов или могут быть бесконечными по длине (аппаратные ограничения в сторону).
Я обнаружил, что для метки в классе TableRow
установки вертикальной sizePolicy
к Fixed
будет на самом деле взять, сколько это нужно уместить все содержимое (см: Qt Layout, resize to minimum after widget size changes). Однако, похоже, это не работает с QScrollArea
. Фактически каждый sizePolicy
, который я пробовал, держит QScrollArea
на фиксированной высоте; за исключением Ignore
, но затем QScrollArea
переходит на высоту 0, независимо от его содержимого.
Я создал git branch, создав упрощенную версию этой проблемы.
Вот результат применения фиксированного вертикального sizePolicy:
Что я ожидал от этого теста:
- высота первого виджета должна быть почти 30px (высота из верхний виджет), только показывающий границы для
QLabel
иQScrollArea
- Высота второго виджета должна быть короче 130 пикселей (максимальная высота
QScrollArea
составляет 100 пикселей), но достаточно большая, чтобы показать е этикетки без прокрутки высоты - На третьем виджете должна быть 130px, и должна появиться полоса прокрутка (эта часть является правильной в каждом случае я пытался когда вертикальная
sizePolicy
установлена вIgnored
за исключением)
I понять, что мне может потребоваться переопределить некоторые вещи, чтобы сделать эту работу, поскольку сама по себе неясно, почему высота QScrollArea может зависеть от ее дочерних виджетов (что, вероятно, поэтому не было спроектировано таким образом, чтобы сделать это легко или, по крайней мере, кажется это не было).
Однако, я думаю, что случай, который я пытаюсь сделать, достаточно распространен, и мой нынешний подход оправдан. Если есть другой/лучший способ сделать прокрутку отдельного виджета после достижения максимальной высоты, я открыт для этого в качестве ответа, если он соответствует трем условиям, которые я ожидаю.
Вы пробовали устанавливать политики размера в видовых экранах вместо самих областей прокрутки? –
Наверное, нет. Что такое видовой экран? :) – Assimilater
Google: Видовой экран - это виджет внутри QScrollArea, в котором отображаются все дочерние виджеты? Я также попытался настроить это, да. В настоящее время я установил для 'Fixed' – Assimilater