Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Mikaell от Декабрь 14, 2011, 13:05



Название: Использование QScrollArea
Отправлено: Mikaell от Декабрь 14, 2011, 13:05
Добрый день!

Есть такая проблема.
Я сделал форму и положил в неё достаточно много контролов.
Получилось, что необходимое количество контролов требует прокрутки страницы вниз.
Я решил использовать QScrollArea.
Так как контролы уже положены и порядок и расположение заново делать не хочется,
то мне нужно как-то перенести все уже сделанное в QScrollArea.
На момент осознания необходимости прокуртуки у меня есть QStackedWidget
лежащий в по умолчанию создающемся centralWidget и есть вертикальный layout в centralWidget.

Я решил делать так (на основе например этого http://www.prog.org.ru/topic_16996_0.html):

QScrollArea * scrollArea = new QScrollArea(this->centralWidget());
scrollArea->setWidgetResizable ( true );
scrollArea->setWidget ( ui.stackedWidget );
ui.verticalLayout_2->addWidget ( scrollArea );

Но скроллбар не появляется.
Более того я попробовал сделать пустой проект и через Designer положить на форму QScrollArea, а потом в неё виджеты
с элементами. Но тоже безуспешно - скроллбар не появляется, как ни изменяй размер формы.


Название: Re: Использование QScrollArea
Отправлено: _OLEGator_ от Декабрь 14, 2011, 14:07
Все дело в
Код
C++ (Qt)
void QScrollArea::setWidgetResizable ( bool resizable )

строка scrollArea->setWidgetResizable ( true ); - лишняя в вашем случае, учите мат часть


Название: Re: Использование QScrollArea
Отправлено: Mikaell от Декабрь 14, 2011, 15:10
Если эту строку убрать то вообще вылезет пустая форма. Так что проблема точно не в этом.


Название: Re: Использование QScrollArea
Отправлено: _OLEGator_ от Декабрь 14, 2011, 15:20
И в этом тоже.
Из приведенного куска кода больше ничего не ясно, прикрепи минимальный проект с ошибкой


Название: Re: Использование QScrollArea
Отправлено: Mikaell от Декабрь 14, 2011, 16:35
Выкладываю.

Строку с "setWidgetResizable" пока оставил, так как без неё у меня совсем не работает.


Название: Re: Использование QScrollArea
Отправлено: _OLEGator_ от Декабрь 15, 2011, 09:37
Мда, тебе следует для начала хотя почитать книгу по Qt и понять как виджеты свои размеры меняют.
Ты накидал внутрь QStackWidget кучу виджетов, без автокомпановки, с ручным позиционированием, но тогда родительский виджет (QStackWidget) может иметь произвольные размеры.
Либо укажи размер с помощью setMinimumSize, setMinimumHeight, либо используй автокомпановку с помощью Q*Layout.

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