Russian Qt Forum
Ноябрь 23, 2024, 19:59
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Техника отлова
Страниц: [
1
]
2
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Техника отлова (Прочитано 23282 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Техника отлова
«
:
Февраль 19, 2015, 10:51 »
Добрый день
Вот замечаю что какой-то виджет у меня перерисовывается хотя по моим расчетам не должен. Очень трудно нвйти чем это вызвано. Ну конечно просмотрел все его update и парентов его - ничего. Ставлю breakpont в paintEvent - ничего не дает, событие QEvent::UpdateRequest было извлечено из очереди, ну он и рисует как положено. А поставить точку на update() - так там будет останавливаться мульен раз. Как же отловить мерзавца?
Спасибо
«
Последнее редактирование: Февраль 26, 2015, 20:27 от Igors
»
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Отлов ложных перерисовок
«
Ответ #1 :
Февраль 19, 2015, 12:47 »
не использовать отладчик, а логировать факт перерисовки (в разных местах) в консоль
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Отлов ложных перерисовок
«
Ответ #2 :
Февраль 19, 2015, 13:24 »
красить все виджеты при n перерисовке в красный цвет, а при n+1 в зелёный. "Мерзавец" будет выделяться.
Записан
Bepec
Гость
Re: Отлов ложных перерисовок
«
Ответ #3 :
Февраль 19, 2015, 15:25 »
А никак. послать евент может любой, а вот узнать кто его послал как бы нереально.
PS с другой стороны можно взять исходники куте, врубить дебаг и поставить брекпоинт с условием на присвоение типа евенту. И там по стеку вылезти и посмотреть что за чудо его создаёт.
Но это на мой взгляд слишком затратно.
«
Последнее редактирование: Февраль 19, 2015, 18:11 от Bepec
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Отлов ложных перерисовок
«
Ответ #4 :
Февраль 20, 2015, 11:51 »
Цитата: qate от Февраль 19, 2015, 12:47
не использовать отладчик, а логировать факт перерисовки (в разных местах) в консоль
Цитата: __Heaven__ от Февраль 19, 2015, 13:24
красить все виджеты при n перерисовке в красный цвет, а при n+1 в зелёный. "Мерзавец" будет выделяться.
Ну кто перерисовывпется - я и так прекрасно знаю, достаточно печатать в notify. Но вот почему?
Цитата: Bepec от Февраль 19, 2015, 15:25
PS с другой стороны можно взять исходники куте, врубить дебаг и поставить брекпоинт с условием на присвоение типа евенту.
Увы, это намертво кладет IDE
Записан
Fat-Zer
Гость
Re: Отлов ложных перерисовок
«
Ответ #5 :
Февраль 20, 2015, 12:06 »
Цитата: Igors от Февраль 20, 2015, 11:51
Увы, это намертво кладет IDE
а если по-мужски, в голом gdb?
Записан
Bepec
Гость
Re: Отлов ложных перерисовок
«
Ответ #6 :
Февраль 20, 2015, 12:18 »
Ммм.. Вопрос - а чем вам мешает лишняя перерисовка?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Отлов ложных перерисовок
«
Ответ #7 :
Февраль 20, 2015, 15:44 »
Цитата: Fat-Zer от Февраль 20, 2015, 12:06
а если по-мужски, в голом gdb?
Мысль интересная, хотя требует изучения подробностей командной строки. Спасибо
Цитата: Bepec от Февраль 20, 2015, 12:18
Ммм.. Вопрос - а чем вам мешает лишняя перерисовка?
Пока ничем, но мириться с этим непрофессионально
Записан
Bepec
Гость
Re: Отлов ложных перерисовок
«
Ответ #8 :
Февраль 20, 2015, 16:36 »
Я б на вашем месте не мучался. Т.е. там же идёт цепочка от самого верхнего окна до вашего виджета. Вполне вероятно кто то из них обновляется.
PS мириться с тем, что не мешает - это нормально. А вот когда начинает мешать - вот тогда надо решать вопрос.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Отлов ложных перерисовок
«
Ответ #9 :
Февраль 20, 2015, 16:42 »
Цитата: Bepec от Февраль 20, 2015, 16:36
PS мириться с тем, что не мешает - это нормально. А вот когда начинает мешать - вот тогда надо решать вопрос.
Вы еще слишком молоды для таких сентенций
Не спешите - стать старым пердуном всегда успеете
Записан
Bepec
Гость
Re: Отлов ложных перерисовок
«
Ответ #10 :
Февраль 20, 2015, 18:49 »
нормальное мнение нормального человека. А вот поиск выдуманных проблем - это уже болезнь.
PS есть такие мании, люди идеально здоровые ищут у себя болячки и находят ведь.
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Отлов ложных перерисовок
«
Ответ #11 :
Февраль 22, 2015, 20:01 »
Если так хочется, можно в paintEvent() флаг завести, и игнорировать те перерисовки, которые кажется вроде бы не нужны. Потом доблестно бороться с глюками, которые вылезут в новых ситуациях.
Мне тоже некоторое время казалось, что paintEvent() слишком часто вызывается. Во-первых, сделал оптимизацию, повыносил оттуда все константные вычисления и прочее что не меняется. Во-вторых, решил, что раз Qt его вызывает, значит ему это зачем-то нужно. Может для каких-то внутренних процедур, которые на экране не видны - кэширования, оптимизаций и т.д.
«
Последнее редактирование: Февраль 22, 2015, 20:05 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Отлов ложных перерисовок
«
Ответ #12 :
Февраль 23, 2015, 12:06 »
Цитата: Bepec от Февраль 20, 2015, 18:49
нормальное мнение нормального человека. А вот поиск выдуманных проблем - это уже болезнь.
PS есть такие мании, люди идеально здоровые ищут у себя болячки и находят ведь.
Цитата: Гурман от Февраль 22, 2015, 20:01
Если так хочется, можно в paintEvent() флаг завести, и игнорировать те перерисовки, которые кажется вроде бы не нужны. Потом доблестно бороться с глюками, которые вылезут в новых ситуациях.
А так у меня и сделано для QOpenGLWidget
иначе (в 5.4) работать невозможно
Рекомендации "на основании опыта/здравого смысла" часто показывают отсутствие таковых
Напр совет "забить на перерисовку" означает что ничего объемного человек еще не рисовал, секунд в paintEvent не имел - однако ж бойко дает общие советы
. И вообще вопрос был "как" ловить, а не "зачем".
Возвращаясь к теме: да, все-таки условный breakpoint в update, в конце-концов заставил его работать. Оказалось QTreeWidget по умолчанию вызывает update при смене фокуса окна. Зачем - хз, ведь фокус самого виджета не меняется. Отключить легко (если знать причину)
Записан
Bepec
Гость
Re: Отлов ложных перерисовок
«
Ответ #13 :
Февраль 23, 2015, 12:20 »
Если б вы сказали о том, что у вас каждая перерисовка тормозит - это повод задуматься. А когда вы пишите, что вас нервирует лишняя - значит дурью маетесь
PS мой совет ведь помог? помог) Так что цените
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Техника отлова
«
Ответ #14 :
Февраль 26, 2015, 20:33 »
Вот новая проблема, тоже дело упирается в "как поймать".
Есть QOpenGLWidget в котором юзер двигает объекты с помощью мыши. В какой-то момент виден "чужой" кадр, никак не связанный со сценой, но что там - рассмотреть не удается, глаз воспринимает это как помеху/мельтешение. Для начала надо хоть как-то на нем остановиться, но как?
Записан
Страниц: [
1
]
2
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...