Russian Qt Forum
Мая 18, 2025, 00:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по менеджеру компоновки  (Прочитано 6067 раз)
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.053 секунд. Запросов: 23.