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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Временно блокировать рисование объекта  (Прочитано 10320 раз)
Akon
Гость
« Ответ #15 : Сентябрь 30, 2010, 22:01 »

Выведи обработку рисования в кокой-нибудь отдельный класс. Он будет проверять флаги и т.п., а предоставлять максимально удобный интерфейс для отрисовки. Окна будут юзать этот класс.

Приведу пример для предложенного мной решения: допустим, есть окно, отображающее графический файл. Файл загружается по сети долго. Сервер обновляет данный файл. Пользователь нажимает кнопку "обновить". Команда идет в контейнер, тот выбрасывает сигнал updating(). Окно сразу же стирается и пишется "Loading... 0%". Далее по мере загрузки контейнер периодически бросает сигнал duringUpdate(). Соответственно в окне "Loading... 1%" и т.д. Когда файл будет загружен, контейнер бросает сигнал updated(), и окно отображает файл.

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Сентябрь 30, 2010, 22:21 »

А через фильтр сообщений не получится?
Каким образои?

Выведи обработку рисования в кокой-нибудь отдельный класс. Он будет проверять флаги и т.п., а предоставлять максимально удобный интерфейс для отрисовки. Окна будут юзать этот класс.
Базовый класс есть, но "что рисовать" не может быть общим для всех, у каждого окна свой набор объектов (иногда всего 1 объект)

Приведу пример для предложенного мной решения: допустим, есть окно, отображающее графический файл. Файл загружается по сети долго. Сервер обновляет данный файл. Пользователь нажимает кнопку "обновить". Команда идет в контейнер, тот выбрасывает сигнал updating(). Окно сразу же стирается и пишется "Loading... 0%". Далее по мере загрузки контейнер периодически бросает сигнал duringUpdate(). Соответственно в окне "Loading... 1%" и т.д. Когда файл будет загружен, контейнер бросает сигнал updated(), и окно отображает файл.
Ну это ситуация простая - сначала все загрузили - потом все отрисовали. Моя же задача "исключить" из рисования невалидный объект
Записан
Akon
Гость
« Ответ #17 : Сентябрь 30, 2010, 22:38 »

Есть объект. В плане рисования оъект или готов или не готов. При рисовании если хотя бы один из объектов не готов, то:
1) не рисуется ничего (Loading x%);
2) рисуются только готовые объекты.

Я привел свой вариант на п.1. Если п.2, то мне не понятно в чем проблема - ну исключил неготовые и отрисовал? Или проблема в самом алгоритме исключения?
Записан
Alex_cs_gsp
Гость
« Ответ #18 : Сентябрь 30, 2010, 22:45 »

А через фильтр сообщений не получится?
Каким образои?

Отлавливать paintEvent() и проверять любимый флаг.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Сентябрь 30, 2010, 22:50 »

то мне не понятно в чем проблема - ну исключил неготовые и отрисовал? Или проблема в самом алгоритме исключения?
А каким образом "исключил"? См. пост #13 по поводу того какие проблемы я имею

Отлавливать paintEvent() и проверять любимый флаг.
А есть ли еще идеи кроме проверки флажка?
Записан
Alex_cs_gsp
Гость
« Ответ #20 : Сентябрь 30, 2010, 22:53 »

Так все-равно, если есть что-то "встроенное", то там также флаг проверяется.
Записан
Akon
Гость
« Ответ #21 : Сентябрь 30, 2010, 23:07 »

Цитировать
А каким образом "исключил"? См. пост #13 по поводу того какие проблемы я имею

Т.е. проблема в механизме исключения? Тогда рисование (PaintEvent'ы и т.п.) это отдельная (тривиальная) задача и пох. сколько там окон.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Сентябрь 30, 2010, 23:35 »

Т.е. проблема в механизме исключения?
Да. Проверку на созданный флажок придется втыкивать в очень многие места, а если появятся новые - опять тыкать. И нельзя сказать "ну это неизбежно" - ведь способ исключения уже есть (см. пост #5)
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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