Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sergek от Сентябрь 29, 2013, 22:20



Название: [РЕШЕНО] Еще раз о динамическом изменении размера виджета
Отправлено: sergek от Сентябрь 29, 2013, 22:20
Коллеги,
форма создается в дизайнере, на ней размещаются фреймы фиксированного размера и компонуются по вертикали. Видимость фреймов устанавливается в процессе выполнения. Размер формы устанавливается по размеру видимых фреймов перед отображением формы. Примерно так:
Код:
    ...
    frame_PaytCondition->setVisible(paytCondition);
    frame_PartialPayt->setVisible(partialPayt);
    frame_DepartmentalInfo->setVisible(departmentalInfo);
    frame_ReceiptDateCollectBank->setVisible(paytCondition);

    QApplication::processEvents();
    adjustSize();
    show();
Это срабатывает (т.е. размер формы по вертикали меняется нужным способом) один раз - при первом (после создания формы) вызове show(). Потом adjustSize() перестает работать.
Это заметно, когда количество видимых фреймов уменьшается по сравнению с предыдущим вызовом.
Если установку размера сделать после отображения:
Код:
    show();
    adjustSize();
то все хорошо, но форма неприятно "моргает".
Подскажите, как заставить работать первый вариант, или как убрать это моргание?
Если честно, задолбали эти компоновщики... ???

UPD: нашел подобный вопрос аж в 2005 году - http://www.prog.org.ru/index.php?topic=1262.msg4685#msg4685 (http://www.prog.org.ru/index.php?topic=1262.msg4685#msg4685)


Название: Re: Еще раз о динамическом изменении размера виджета
Отправлено: gil9red от Сентябрь 29, 2013, 23:19
UPD: нашел подобный вопрос аж в 2005 году - http://www.prog.org.ru/index.php?topic=1262.msg4685#msg4685 (http://www.prog.org.ru/index.php?topic=1262.msg4685#msg4685)
И в той же теме аж в 2005 году дали ответ как решить вопрос :)
http://www.prog.org.ru/index.php?topic=1262.msg4730#msg4730


Название: Re: Еще раз о динамическом изменении размера виджета
Отправлено: sergek от Сентябрь 30, 2013, 08:18
А как это решает означенную проблему, тем более, мою - с формой, созданной в дизайнере?


Название: Re: Еще раз о динамическом изменении размера виджета
Отправлено: sergek от Сентябрь 30, 2013, 10:28
Решил сделать пример (см. вложение) и обнаружил, что, если форму сделать на основе QDialog, то adjustSize() отрабатывает хорошо, даже без processEvents(). Если фреймы расположить на форме, сделанной на основе QMainWindow, наблюдается описанный эффект - форма не изменяет свой размер по размерам оставшихся видимыми фреймов. Догадываюсь, что это связано, видимо, с разной обработкой событий, но уже не хочется копать.
Если кто сможет это объяснить, буду благодарен, а тему закрываю.