2010-08-31 2 views
10

У меня есть окно, содержащее QScrollArea с изображением пары виджетов.Qt: Как изменить размер окна до его нового содержимого

До сих пор я создавал QScrollArea и его дочерние виджеты в конструкторе моего окна, а затем менял размер окна по вертикали, чтобы соответствовать его контенту, используя resize(400, sizeHint().height()). Все идет нормально.

Теперь я добавляю или удаляю виджеты в QScrollArea во время выполнения. Что делать, добавив или удалив виджеты, чтобы окно соответствовало его содержимому по вертикали? Должен ли я позвонить adjustSize()? resize(sizeHint())? Должен ли быть звонок до layout->activate() или, может быть, updateGeometry()? Какая политика размера действительно имеет значение в этом случае? Окна, или область прокрутки, или и то, и другое? Я попытался установить их все на Expanding.

Я использую Qt 4.6 для Windows.

+0

Хотите, чтобы у QScrollArea не было полос прокрутки? –

+0

Абсолютно, прямо сейчас идея состоит в том, чтобы избавиться от вертикальной полосы прокрутки. Следующий шаг будет состоять в том, чтобы позволить ему появляться только в том случае, если общая высота содержимого QScrollArea действительно слишком велика или пользователь изменяет размер окна. –

ответ

9

Кажется, что вызов resize(sizeHint()) (без какой-либо другой магии) после добавления виджета в область прокрутки фактически делает трюк. Как-то пропустил это в первый раз.

+1

Мне это было нужно для вертикальной настройки, и это получилось: 'QSize s = sizeHint(); s.setWidth (ширина()); resize (s); ' – Notinlist

+0

Возможно, это поможет кому-то еще, кто найдет этот вопрос, но имеет свою проблему. Диалог фактически изменил размер содержимого, но из-за размера окна в дизайне QT он был отрублен снизу. Изменение размера окна в дизайнере QT, чтобы позволить больше места внизу зафиксировать его для меня – slf

Смежные вопросы