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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Сбросить размер диалога в исходное состояние  (Прочитано 4426 раз)
neversleep
Гость
« : Февраль 10, 2013, 09:01 »

Доброго времени суток. Есть некий диалог(обычный наследник от QDialog) который создаётся 1 раз и по мере необходимости отображается, в процессе работы с этим диалогом его размеры могу изменяться, как сделать так, чтобы при каждом новом отображении этого диалога его размеры сбрасывались в исходные не привязываясь при этом к фиксированным значениям?

Вроде ничего сложного, но не получается:
Код
C++ (Qt)
int DlgOptions::my_execute()
   if (ui->btnShowAdditionalInfo->isChecked()) {
       ui->btnShowAdditionalInfo->setChecked(false);
       ui->groupBox->setVisible(false);
 
       resize(width(), sizeHint().height());
   }
   return exec();
}
 
« Последнее редактирование: Февраль 10, 2013, 16:36 от neversleep » Записан
Bepec
Гость
« Ответ #1 : Февраль 10, 2013, 11:09 »

adjustSize()?
Записан
neversleep
Гость
« Ответ #2 : Февраль 10, 2013, 11:55 »

Тоже самое.

Подробнее: открыли диалог, на нем есть кнопочка "показать доп. инфу" - кликаем на неё и диалог становиться длиннее, закрываем диалог, открываем еще раз - вот тут надо восстановить размеры в исходное состояние.
Записан
Bepec
Гость
« Ответ #3 : Февраль 10, 2013, 12:12 »

Вас не понять. Аджуст сайз выбирает минимальный размер окна.

Почему и что у вас не получается - вы не показываете. Кода нет, картинок нет, проекта нет.

Максимум что могу сказать - ваши тараканы, справиться можете лишь вы сами, ибо мы (я) вообще ничего о вашей проблеме незнаю Улыбающийся
Записан
neversleep
Гость
« Ответ #4 : Февраль 10, 2013, 13:24 »

Код я показал в 1 посте, думал этого будет достаточно.

Еще раз перепроверил с методом adjustSize() - помогло, спасибо.

Одно не понятно, если adjustSize() использует sizeHint(), то почему resize(width(), sizeHint().height()); не работает, а adjustSize() сработал?
Код
C++ (Qt)
int DlgOptions::my_execute()
{
   ui->groupBox->setVisible(false);
 
qDebug() << size(); // QSize(320, 342)
 
resize(width(), sizeHint().height());
qDebug() << size(); // QSize(320, 342)
 
adjustSize(); // This function uses sizeHint() if it is valid.
qDebug() << size(); // QSize(320, 172)
 
 return exec();
}
Записан
VPS
Гость
« Ответ #5 : Февраль 10, 2013, 13:38 »

Вместо изменения размеров в "my_execute()", можно в конструкторе диалога добавить:
"layout()->setSizeConstraint(QLayout::SetFixedSize);", а в методе только отменять выбор кнопки (которая расширяет диалог).

П.С.: во вложении, немного переделанный пример из книги по Qt.
« Последнее редактирование: Февраль 10, 2013, 13:50 от VPS » Записан
neversleep
Гость
« Ответ #6 : Февраль 10, 2013, 14:02 »

Вместо изменения размеров в "my_execute()", можно в конструкторе диалога добавить:
"layout()->setSizeConstraint(QLayout::SetFixedSize);", а в методе только отменять выбор кнопки (которая расширяет диалог).

П.С.: во вложении, немного переделанный пример из книги по Qt.

Интересно, спасибо. Правда ширина тогда плывёт, хотелось бы чтобы она всегда была фиксированная.
Записан
VPS
Гость
« Ответ #7 : Февраль 10, 2013, 16:19 »

Интересно, спасибо. Правда ширина тогда плывёт, хотелось бы чтобы она всегда была фиксированная.

У Вас плывёт из-за третьего groupbox-а. Можно задать минимальную ширину первого по третьему (в конструкторе), тогда плыть перестанет:

Код:
primaryGroupBox->setMinimumWidth(tertiaryGroupBox->sizeHint().width());
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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