Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: andrew.k от Ноябрь 14, 2010, 21:48



Название: Фиксированный размер QDialog
Отправлено: andrew.k от Ноябрь 14, 2010, 21:48
Как сделать QDialog неизменяемого размера?
Делаю сайзполиси Fixed по высоте и ширине и по-прежнему могу менять размер.
Если делать SetFixedSize, то я получаю диалог строго фиксированного размера в пикселах. Это не совсем то, так как шрифт используемый в диалоге может меняться, соответственно, став крупнее он не поместится в текущие рамки заданные в пикселах.
Как быть?


Название: Re: Фиксированный размер QDialog
Отправлено: cya-st от Ноябрь 14, 2010, 22:12
Вызывай динамически setFixedHeight и setFixedWidth в зависимости от размера шрифта, других вариантов я думаю что нет.


Название: Re: Фиксированный размер QDialog
Отправлено: andrew.k от Ноябрь 14, 2010, 22:55
в таком случае мне нужно будет определять суммарный размер всех контроллов, которые лежат в диалоге, с учетом их расположения в лэйаутах. А это не тривиально.


Название: Re: Фиксированный размер QDialog
Отправлено: kirill от Ноябрь 15, 2010, 08:13
на диалоге есть layout?
Если есть то layout->setSizeConstraint(QLayout::SetFixedSize)

Изменять не даст, но и сожмет лэйаут до минимума
поэтому может стоит задать setMinimumWidth()


Название: Re: Фиксированный размер QDialog
Отправлено: GreatSnake от Ноябрь 15, 2010, 09:07
Цитировать
в таком случае мне нужно будет определять суммарный размер всех контроллов, которые лежат в диалоге, с учетом их расположения в лэйаутах. А это не тривиально.
Всё довольно-таки тривиально.
Перед QDialog::show() вызываешь QDialog::adjustSize(), после чего получаешь размер окна диалога и уже полученным размером фиксируешь окно.
PS. Иногда перед adjustSize() может потребоваться вызвать QApplication::processEvents().


Название: Re: Фиксированный размер QDialog
Отправлено: andrew.k от Ноябрь 15, 2010, 17:58
надо попробовать.
Нашел такой флаг QMSWindowFixedDialogSizeHint он используется у QMessageBox как дефолтное значение виджет флагов.
И сам диалог действительно не тянется.
Почему может не работать у меня?