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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Обновление(перерисовка) состояния виджетов. set*** и update(). Вопрос. Qt 4.5.0  (Прочитано 33531 раз)
Danila_Bagrofff
Гость
« Ответ #15 : Декабрь 14, 2009, 07:54 »

а где-то можно прочитать, что такой вызов update из обработчика событий разрешен? Именно из официальных источников... Что-то в ассистанте не нахожу...  Непонимающий
Записан
spectre71
Гость
« Ответ #16 : Декабрь 14, 2009, 09:28 »

а где-то можно прочитать, что такой вызов update из обработчика событий разрешен? Именно из официальных источников... Что-то в ассистанте не нахожу...  Непонимающий

Читай в QT Assistant.
void QWidget::update ()
Записан
Danila_Bagrofff
Гость
« Ответ #17 : Декабрь 15, 2009, 09:52 »

народ, а можно получить вашу оценку одной гениальной идеи обновления:

Мы попадаем в пользовательский обработчик событий customEvent(), где вместо обновления виджета добавляем его в список для последующего обновления в таймере.
Получаем список объектов, которые надо обновлять.
Запускается таймер с определенной частотой, который для каждого объекта из списка вызывает update()
Затем вызывается processEvents, который проталкивает очередь событий и выполняет отрисовку.
И при этом хотят, чтобы быстро произошло обновление, в соотвествии с текущим состоянием.

Я не понимаю, как можно такое реализовать:
Cам таймер обрабатывается через eventTimer(). Вызывая события...
В результате processEvents() будет попадание в обработчик и снова может быть вызван customEvent() с последующей установкой виджетов на обновления.
Время таймера, по-моему, никак нельзя согласовать... К тому же оно само обрабатывается по событию...
НАсколько будет своеевременность обновления  - у меня тоже сомнения...

ПС, идея не моя.. свое мнение об этом оставлю в стороне, интересно ваше мнение...
« Последнее редактирование: Декабрь 15, 2009, 10:21 от Danila_Bagrofff » Записан
Dendy
Гость
« Ответ #18 : Декабрь 17, 2009, 01:12 »

Это чревато визуальной задержкой, когда пользователь успеет заметить латентность отклика. При мышиных/клавиатурных действиях такое нежелательно. А вообще - нормальная идея, если нужно склеить несколько обновлений в одно. К примеру, состояние долгой операции (качание файла) совсем не обязательно обновлять каждые 1 мс, достаточно накопить изменения и показать их через 1 с. Например:

Код
C++ (Qt)
bool MyObject::event( QEvent * e )
{
 if ( e->type() == MyCystomEventType )
 {
   setOfWidgets_ << someWidget;
   if ( !myTimer_.isActive() )
     myTimer_.start( 0, this );
   return true;
 }
 return ParentObject::event( e );
}
 
void MyObject::timerEvent( QTimerEvent * e )
{
 if ( e->timerId() == myTimer_.timerId() )
 {
   foreach( QWidget * widget, setOfWidgets_ )
     widget->update();
   myTimer_.stop();
   return;
 }
 ParentObject::timerEvent( e );
}
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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