Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Joss от Июль 10, 2009, 01:27



Название: ScrollBar при изменении размера окна
Отправлено: Joss от Июль 10, 2009, 01:27
Добрый день от новичка.

Ни как еще не могу победить компоновку. Суть проблемы:

Основа: MainWindow, на нем сверху размещены кнопки, чуть ниже Stacked Widget с набором чекбоксов.
Хочется: появление вертикальной полосы прокрутки (в которой будет прокручиваться Stacked Widget) при уменьшении вертикальных размеров окна.

В дизайнере создан:

- Widget
- в Widget помещен Stacked Widget

Код дизайнера:
Код:
...
        widget = new QWidget(tab_3); // создал внутри табвиджета область, в которой хочется иметь прокрутку при ресайзе
...
        stackedWidget = new QStackedWidget(widget); // добавил основной контент

В коде самостоятельно уже прописал:

Код:
...
    pm_scrollArea = new QScrollArea(widget);
    pm_scrollArea->setWidget(stackedWidget); // вопрос 1
    pm_scrollArea->setWidgetResizable(true);
    pm_scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    pm_scrollArea->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum); // вопрос 2
    pm_scrollArea->setMaximumSize(400,400);

Вот тут я начинаю плавать:

1: здесь получается что widget стал потомком QScrollArea, но в дизайнере он был потомком tab_3. Это нормально?
2: после размышления, я пришел к выводу, что нам нужно установить setWidgetResizable для QScrollArea, чтобы он был видимым всегда, при ресайзе окна, но при установке этого флага область сворачивается в минимальную, что-то ничего не получилось сделать.

Т.е. сейчас, если поставить setWidgetResizable(false) - области прокрутки не появляются при уменьшении размера окна. Если поставить true - вся область сворачивается в минимальную - по несколько пикселов шириной.

Может быть вместо Widget в дизайнере надо было все обернуть в какой-нибудь Vertical Layout?

Буду очень благодарен за ответы, чтобы хоть как то сдвинуться.


Название: Re: ScrollBar при изменении размера окна
Отправлено: lit-uriy от Июль 10, 2009, 01:36
>>1: здесь получается что widget стал потомком QScrollArea,
pm_scrollArea = new QScrollArea(widget); // pm_scrollArea является дочерним виджетом для widget


Название: Re: ScrollBar при изменении размера окна
Отправлено: lit-uriy от Июль 10, 2009, 01:38
1) в Дизайнере положи на главное окно ScrollArea
2) выдели главное окно и выбери одну из компоновок, вертикальную или горизонтальную
3) на ScrollArea положи Stacked Widget.
4) выдели ScrollArea и выбери одну из компоновок, вертикальную или горизонтальную
5) Настрой ScrollArea как тебе надо.


Название: Re: ScrollBar при изменении размера окна
Отправлено: Joss от Июль 10, 2009, 02:07
Огромное спасибо!
Еще нужно было Fixed сделать для контента внутри ScrollArea.