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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Корректировка позициии окна  (Прочитано 3891 раз)
Куть
Гость
« : Июль 21, 2010, 11:57 »

Всем привет!
Хочется корректировать позицию окна относительно других окон в QMdiArea при перетаскивании мышкой. Для этого в классе-наследнике QMdiArea переопределил eventFilter, который ловит перемещения дочерних окон. В этом фильтре вычисляю новую позицию окна, вызываю move для него и возвращаю из eventFilter true, чтобы сообщение до окна не доходило. Сообщение действительно не доходит, но окно успевает отрисоваться в нескорректироавнной позиции, а затем черед долю секунды в скорректированной, получается никому не нужное дрожание окошка.
Собственно вопрос: как избавится от первого рисования окна до корректировки его позиции?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Июль 21, 2010, 18:21 »

А если сразу после перемещения вызвать слот update (или repaint на крайняк)?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Куть
Гость
« Ответ #2 : Июль 22, 2010, 16:48 »

Ни update, ни repaint не помогают.
Приведу на всякий случай упрощенный кусок кода, чтобы было понятнее:
Код:
bool MyMdiArea::eventFilter(QObject *obj, QEvent *ev)
{
  QMdiSubWindow *w = qobject_cast<QMdiSubWindow *>(obj);
  if (w && ev->type() == QEvent::Move)
  {
    QPoint pos(w->x(), w->y());
    QPoint valPos=validateWindowPos(w, pos);

    if(pos != valPos)
    {           
       w->move(valPos);
       // w->update();  <- не помогает
       // w->repaint();  <- тоже не помогает
       return true;
    }
  }

  return QMdiArea::eventFilter(obj, ev);
}

Думаю, что всё это не помогает, т.к. окно уже отрисовалось до eventFilter в нескорректированной позиции. Или собирается отрисоваться независимо от eventFilter - хз.
Записан
Куть
Гость
« Ответ #3 : Июль 27, 2010, 15:08 »

Новая деталь: этот код работает, пока в одном из QMdiSubWindow не появляется дочерний QAxWidget. После этого начинаются дергания, причем не заканчиваются даже после закрытия окошка с QAxWidget.

Есть мысли?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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