Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: memnek от Январь 10, 2010, 20:05



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


Название: Re: Вопрос по менеджеру компоновки
Отправлено: BRE от Январь 10, 2010, 20:15
Посмотри в assistant:
Extension Example


Название: Re: Вопрос по менеджеру компоновки
Отправлено: memnek от Январь 10, 2010, 20:21
Там именно то, что я и сказал: устанавливается SetFixedSize. Виджет не меняет свой размер


Название: Re: Вопрос по менеджеру компоновки
Отправлено: BRE от Январь 10, 2010, 21:05
Немного изменил этот пример.


Название: Re: Вопрос по менеджеру компоновки
Отправлено: memnek от Январь 10, 2010, 22:07
спасибо. но когда виджеты скрыты окно всё равно не может менять размер  :( хотелось бы, чтобы меняло
даже так: как сделать, чтобы при сворачивании/разворачивании некой части размер окна по вертикали автоматически подгонялся под видимую часть, а по горизонтали не менялся


Название: Re: Вопрос по менеджеру компоновки
Отправлено: BRE от Январь 10, 2010, 23:20
спасибо. но когда виджеты скрыты окно всё равно не может менять размер  :( хотелось бы, чтобы меняло
даже так: как сделать, чтобы при сворачивании/разворачивании некой части размер окна по вертикали автоматически подгонялся под видимую часть, а по горизонтали не менялся
Так вот ты и подумаю/попробуй как это сделать.   ;)
Этот пример для затравки.


Название: Re: Вопрос по менеджеру компоновки
Отправлено: memnek от Январь 11, 2010, 14:43
можно конечно при нажатии на кнопку вызывать слот, который явно указывает высоту. просто мне хотелось узнать, можно ли каким-то образом через менеджеры компоновки это сделать


Название: Re: Вопрос по менеджеру компоновки
Отправлено: lit-uriy от Январь 11, 2010, 16:22
void QWidget::adjustSize ()


Название: Re: Вопрос по менеджеру компоновки
Отправлено: Kolobok от Январь 11, 2010, 22:35
adjustSize может изменить как высоту, так и ширину.

Код:
resize( width (), sizeHint ().height () );


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