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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по менеджеру компоновки  (Прочитано 5913 раз)
memnek
Гость
« : Январь 10, 2010, 20:05 »

Хотелось бы узнать, как сделать подобный интерфес:
http://i033.radikal.ru/1001/4c/927a39c55734.png
т.е. чтобы при нажатии например на кнопку, часть виджетов становилась невидимой и размер всего окна менялся в соответствии с размером только видимых виджктов.
Проблема в том, что при нажатии на кнопку, размер окна не меняется, а виджеты заполняются в окне в соответствии с его размером (т.е. перемещаются на середину)
в книжке прочитал возможное решение: наследовать класс от класса, созданного в Qt Designer, и в его конструкторе прописать
Код
C++ (Qt)
someWidget->hide();
layout()->setSizeConstraint(QLayout::SetFixedSize)
 
тогда окно уменьшается при необходимости, но нельзя изменить его размеры потом. Как быть?
Записан
BRE
Гость
« Ответ #1 : Январь 10, 2010, 20:15 »

Посмотри в assistant:
Extension Example
Записан
memnek
Гость
« Ответ #2 : Январь 10, 2010, 20:21 »

Там именно то, что я и сказал: устанавливается SetFixedSize. Виджет не меняет свой размер
Записан
BRE
Гость
« Ответ #3 : Январь 10, 2010, 21:05 »

Немного изменил этот пример.
Записан
memnek
Гость
« Ответ #4 : Январь 10, 2010, 22:07 »

спасибо. но когда виджеты скрыты окно всё равно не может менять размер  Грустный хотелось бы, чтобы меняло
даже так: как сделать, чтобы при сворачивании/разворачивании некой части размер окна по вертикали автоматически подгонялся под видимую часть, а по горизонтали не менялся
« Последнее редактирование: Январь 10, 2010, 22:11 от memnek » Записан
BRE
Гость
« Ответ #5 : Январь 10, 2010, 23:20 »

спасибо. но когда виджеты скрыты окно всё равно не может менять размер  Грустный хотелось бы, чтобы меняло
даже так: как сделать, чтобы при сворачивании/разворачивании некой части размер окна по вертикали автоматически подгонялся под видимую часть, а по горизонтали не менялся
Так вот ты и подумаю/попробуй как это сделать.   Подмигивающий
Этот пример для затравки.
Записан
memnek
Гость
« Ответ #6 : Январь 11, 2010, 14:43 »

можно конечно при нажатии на кнопку вызывать слот, который явно указывает высоту. просто мне хотелось узнать, можно ли каким-то образом через менеджеры компоновки это сделать
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Январь 11, 2010, 16:22 »

void QWidget::adjustSize ()
Записан

Юра.
Kolobok
Гость
« Ответ #8 : Январь 11, 2010, 22:35 »

adjustSize может изменить как высоту, так и ширину.

Код:
resize( width (), sizeHint ().height () );
Записан
aljeshishe
Гость
« Ответ #9 : Январь 13, 2010, 19:22 »

Я в подобной ситуации вычислял размер скрываемого виджета, скрывал виджет, ресазил форму на подсчитанный размер
+ style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing)(это дефолтовое расстояние между виджетами в лейауте),
еще не забывал делать
Код:
layout()->setEnabled(false);
...
layout()->setEnabled(true);
что бы не было мерцаний.
Ну еще совсем хорошо обработать ситуацию если isMaximized(), потому как тогда ресайзить форму смысла нет
Работать работало, хотя попой чувствую что есть более простое решение
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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