Russian Qt Forum
Ноябрь 26, 2024, 01:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование QScrollArea  (Прочитано 4278 раз)
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, а потом в неё виджеты
с элементами. Но тоже безуспешно - скроллбар не появляется, как ни изменяй размер формы.
Записан
_OLEGator_
Гость
« Ответ #1 : Декабрь 14, 2011, 14:07 »

Все дело в
Код
C++ (Qt)
void QScrollArea::setWidgetResizable ( bool resizable )

строка scrollArea->setWidgetResizable ( true ); - лишняя в вашем случае, учите мат часть
Записан
Mikaell
Гость
« Ответ #2 : Декабрь 14, 2011, 15:10 »

Если эту строку убрать то вообще вылезет пустая форма. Так что проблема точно не в этом.
Записан
_OLEGator_
Гость
« Ответ #3 : Декабрь 14, 2011, 15:20 »

И в этом тоже.
Из приведенного куска кода больше ничего не ясно, прикрепи минимальный проект с ошибкой
Записан
Mikaell
Гость
« Ответ #4 : Декабрь 14, 2011, 16:35 »

Выкладываю.

Строку с "setWidgetResizable" пока оставил, так как без неё у меня совсем не работает.
Записан
_OLEGator_
Гость
« Ответ #5 : Декабрь 15, 2011, 09:37 »

Мда, тебе следует для начала хотя почитать книгу по Qt и понять как виджеты свои размеры меняют.
Ты накидал внутрь QStackWidget кучу виджетов, без автокомпановки, с ручным позиционированием, но тогда родительский виджет (QStackWidget) может иметь произвольные размеры.
Либо укажи размер с помощью setMinimumSize, setMinimumHeight, либо используй автокомпановку с помощью Q*Layout.

И вообще, что за изврат сначала добавлять QStackWidget на главную форму в layout, а потом в коде перебивать на его место QScrollArea, в которую насильно заталкивать QStackWidget. Создай его отдельно от главной формы и добавь его в QScrollArea в коде, зачем все в кучу мешать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.296 секунд. Запросов: 21.