crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Диалог со скрытыми дополнительными настройками, Кажется я что-то делаю не так
Kagami
  опции профиля:
сообщение 18.10.2009, 22:03
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Решил сделать диалог со скрытыми дополнительными настройками. Пара полей ввода скрыта пока не будет нажата кнопка "More >>". Я соединил сигнал ее нажатия со слотом где переключаю видимость эти элементов. В этом слоте я также подстраиваю размер формы под новый размер. Но меня смущают два момента:
1. Чтобы изменение размера произошло надо вызывать adjustSize() два раза;
2. Если изменить размер формы и показать/скрыть дополнительные поля ввода, ее размер снова становится минимальным. Я же хочу сохранять горизонтальный размер формы.
Поэтому мне кажется что я что-то делаю не правильно. Есть у кого-нибудь идеи как это правильно делается?
Минимальный компилируемый проект и скриншоты ниже ;)
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  moredlg.zip ( 2,81 килобайт ) Кол-во скачиваний: 141
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 19.10.2009, 0:40
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Kagami @ 18.10.2009, 23:03) *
1. Чтобы изменение размера произошло надо вызывать adjustSize() два раза;

Скорее всего это связано с тем, что метод setVisible(false) пораждает эвент, а не меняет видимость виджетов моментально, также как и пересчет размеров виджетов в лэйауте происходит уже при выходе из метода toggleInput. Т.е. adjustSize нужно ставить последним в очереди. Это можно сделать через QTimer::singleShot() или через emit своего queued сигнала или через QMetaObject::invokeMethod с Qt::QueuedConnection. Или просто вызвав обработку эвентов заранее:

    QApplication::processEvents();
    adjustSize()


Цитата(Kagami @ 18.10.2009, 23:03) *
2. Если изменить размер формы и показать/скрыть дополнительные поля ввода, ее размер снова становится минимальным. Я же хочу сохранять горизонтальный размер формы.


Можно так сделать:

    m_ui->setupUi(this);
    setMaximumWidth(width());
    setMinimumWidth(width());


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 22:24