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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Пропорциональное изменение размеров окна  (Прочитано 15940 раз)
dox
Гость
« Ответ #15 : Июль 23, 2010, 17:51 »

Приветствую. Код что с resize вызывает рекурсию. Кто может подсказать куда копать чтобы сделать пропорциональный ресайз окна?
Спасибо.
Записан
dox
Гость
« Ответ #16 : Июль 23, 2010, 21:14 »

Код:
void mwindow::resizeEvent(QResizeEvent *event)
{

    QSize newSize = event->size();
    QSize oldSize = event->oldSize();

    if(!newSize.isValid() || !oldSize.isValid()){
            return;
    }
    if(newSize == oldSize || newSize == s)
     {
         
        return;                               
    }

 
    qDebug("wN=%d hN=%d wO=%d hO=%d",newSize.width(),newSize.height(),oldSize.width(),oldSize.height());

    oldSize.setWidth(newSize.width());
   oldSize.setHeight(newSize.width());

 
//QApplication::processEvents();
    s = oldSize;
   resize(oldSize);

 

QDialog::resizeEvent(event);
}

Вот код. но при выполнении окно уменьшается до исходных размеров плюс один. Причем одна особенность проявляется при просмотре дэбаг вывода: сообщения resize вызываются после того как отпущена кнопка мыши после ресайза. Причем в любом случае ресайз происходит на 1 пиксел. Если раскоментить QApplication::processEvents();, то ресайз при увеличении окна срабатывает нормально при отпускании клавиши. Однако при уменьшении выдает ошибку. Кто что думает по этому вопросу?
Записан
JamS007
Гость
« Ответ #17 : Июль 23, 2010, 23:59 »

Вот, от нечего делать написал вам примерчик. На идеальность не претендую Улыбающийся Писал в пятницу вечером. Тестил только под линуксом.

Из-за рекурсии иногда притормаживает, но это, думаю, можно победить. Мне просто уже спать охота Улыбающийся
« Последнее редактирование: Июль 24, 2010, 00:05 от JamS007 » Записан
dox
Гость
« Ответ #18 : Июль 24, 2010, 07:46 »

Приветствую. Попробовал пример, не работает. Думаю что вообще говоря вызов resize  из resizeEvent не оч. хорошая идея. Как я понял resizeEvent вызывается когда размеры уже заданы для окна. Если у кого есть работающий пример, давайте его в вики выложим. Сейчас я изучаю вариант ресайза через winEventFilter.
Записан
dox
Гость
« Ответ #19 : Июль 24, 2010, 11:02 »

Вопрос решил с помощью winEvent для виджета.
Записан
ufna
Гость
« Ответ #20 : Октябрь 29, 2010, 15:17 »

Вышел через поиск. Для этих же целей: http://ufna.ru/2010/08/16/qt-proportional-window-resize-win
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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