Изменение размера QDialog во время выполнения

У меня есть подкласс QDialog, содержащий некоторые параметры моего приложения. Некоторые из опций являются основными, другие - расширенными, поэтому я решил поместить их в отдельный проверяемый QGroupBox.введите описание изображения здесь
Я хочу, чтобы диалоговое окно уменьшалось по вертикали, когда пользователь установил флажок расширенных параметров, но я не могу найти способ сделать это правильно - размер диалога остается неизменнымвведите описание изображения здесь
Я установил политику размера диалога на Расширение, попытался вызвать adjustSize() и попытался позвонить resize() метод - ничего не помогает Я не могу программно изменить размер диалогового окна, чтобы оно было меньше текущего размера (оно может только увеличиваться). В то же время, можно изменить размер вручную.введите описание изображения здесь
Кто-нибудь может мне помочь?

2 ответа

Решение

Если вам не нужно ручное изменение размера, вы можете добавить

layout()->setSizeConstraint(QLayout::SetFixedSize);

для конструктора диалогов, макет берет на себя ответственность за автоматическое изменение размера при отображении или скрытии виджетов.

Я пробовал использовать метод, описанный Златомиром, но он вызывает некоторые неожиданные побочные эффекты. На скриншотах ниже показано поведение QDialog при отсутствии


Исходный вид диалогового окна

Вид диалога после изменений

А потом, когда

      layout()->setSizeConstraint(QLayout::SetFixedSize);

активен

а также

Поскольку ширина последнего столбца в QTableWidget определяется программно при запуске QDialog, опция QLayout::SetFixedSize также приводит к тому, что диалоговое окно становится шире, чем то, что можно увидеть на следующих двух снимках экрана:

Есть ли другой вариант изменения размера QDialog в соответствии с шириной и высотой виджетов в макете QDialog. Просто для справки я использую QGridLayout с каждым столбцом одинакового размера.

Другие вопросы по тегам