Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: neversleep от Февраль 10, 2013, 09:01



Название: [РЕШЕНО]Сбросить размер диалога в исходное состояние
Отправлено: 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();
}
 


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: Bepec от Февраль 10, 2013, 11:09
adjustSize()?


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: neversleep от Февраль 10, 2013, 11:55
Тоже самое.

Подробнее: открыли диалог, на нем есть кнопочка "показать доп. инфу" - кликаем на неё и диалог становиться длиннее, закрываем диалог, открываем еще раз - вот тут надо восстановить размеры в исходное состояние.


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: Bepec от Февраль 10, 2013, 12:12
Вас не понять. Аджуст сайз выбирает минимальный размер окна.

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

Максимум что могу сказать - ваши тараканы, справиться можете лишь вы сами, ибо мы (я) вообще ничего о вашей проблеме незнаю :)


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: neversleep от Февраль 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();
}


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: VPS от Февраль 10, 2013, 13:38
Вместо изменения размеров в "my_execute()", можно в конструкторе диалога добавить:
"layout()->setSizeConstraint(QLayout::SetFixedSize);", а в методе только отменять выбор кнопки (которая расширяет диалог).

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


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: neversleep от Февраль 10, 2013, 14:02
Вместо изменения размеров в "my_execute()", можно в конструкторе диалога добавить:
"layout()->setSizeConstraint(QLayout::SetFixedSize);", а в методе только отменять выбор кнопки (которая расширяет диалог).

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

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


Название: Re: Сбросить размер диалога в исходное состояние
Отправлено: VPS от Февраль 10, 2013, 16:19
Интересно, спасибо. Правда ширина тогда плывёт, хотелось бы чтобы она всегда была фиксированная.

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

Код:
primaryGroupBox->setMinimumWidth(tertiaryGroupBox->sizeHint().width());