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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Еще раз о динамическом изменении размера виджета  (Прочитано 3156 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« : Сентябрь 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
« Последнее редактирование: Сентябрь 30, 2013, 10:28 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Сентябрь 29, 2013, 23:19 »

UPD: нашел подобный вопрос аж в 2005 году - http://www.prog.org.ru/index.php?topic=1262.msg4685#msg4685
И в той же теме аж в 2005 году дали ответ как решить вопрос Улыбающийся
http://www.prog.org.ru/index.php?topic=1262.msg4730#msg4730
Записан

sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Сентябрь 30, 2013, 08:18 »

А как это решает означенную проблему, тем более, мою - с формой, созданной в дизайнере?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Сентябрь 30, 2013, 10:28 »

Решил сделать пример (см. вложение) и обнаружил, что, если форму сделать на основе QDialog, то adjustSize() отрабатывает хорошо, даже без processEvents(). Если фреймы расположить на форме, сделанной на основе QMainWindow, наблюдается описанный эффект - форма не изменяет свой размер по размерам оставшихся видимыми фреймов. Догадываюсь, что это связано, видимо, с разной обработкой событий, но уже не хочется копать.
Если кто сможет это объяснить, буду благодарен, а тему закрываю.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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