QPaintEvent, installEventFilter, QPainter, Overpainting |
Здравствуйте, гость ( Вход | Регистрация )
QPaintEvent, installEventFilter, QPainter, Overpainting |
igor_bogomolov |
27.5.2009, 13:50
Сообщение
#41
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
У меня на сегодня уже перенагрузка мозга пошла. Вообще перестал что либо понимать. Так что не ругайте если что.
отрисовать только одно окно не вызывая при этом перерисовку (генерацию эвентов перерисовки) для дочерних окон О каких окнах речь идет? И причем здесь вообще окна? Задача, как я изначально понял, бала - найти возможность рисовать поверх виджетов. Если у тебя два окна, у них раззные циклы обработки событий. Или ты хочешь сказать, что если я имею два диалоговых окна, изменю размер одного, для второго придет событие на перерисовку? |
|
|
SABROG |
27.5.2009, 14:05
Сообщение
#42
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Виджет.
|
|
|
Litkevich Yuriy |
27.5.2009, 14:41
Сообщение
#43
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
27.5.2009, 14:56
Сообщение
#44
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Господа, поздравьте меня. Наконец-то я это сделал: Я что-то непонял, причём здесь покрашеное в чёрный цвет окно?это альфа-канал, который ставится каждому чайлду. Но из-за того, что прозрачные бэкграунды наслаиваются друг на друга местами альфа-канал суммируется и происходит лажа. |
|
|
igor_bogomolov |
27.5.2009, 15:00
Сообщение
#45
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Тебя смущает двойной вызов обработчика события рисования для каждого виджета? Я правильно понимаю?
Но вызов ни к чему не приведет. Событие вызовится, но QPainter.begin() вернет false. Мы это уже недавно обсуждали, где то в теме есть ссылочка.Тагда приходим к тому же самому. Нужно разбираться как работает метод update(). У меня разобраться не получилось. Может ты сможешь. Помоему предложенный вариант тоже неплох. Свою задачу он выполняет. |
|
|
SABROG |
27.5.2009, 15:12
Сообщение
#46
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
У меня разобраться не получилось Да вот у меня тоже не получается. Слишком уж много там проверок всяческих. Например в момент отрисовки виджету ставится спец.аттрибут:
и походу именно таким образом он определяет, что QPainter пытается рисовать в paintEvent'e. Пытался симулировать, не получилось. Сейчас затык видимо в paintEngine. |
|
|
Litkevich Yuriy |
27.5.2009, 15:28
Сообщение
#47
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
SABROG, я к тому, что вроде была для этого отдельная тема
|
|
|
igor_bogomolov |
27.5.2009, 16:33
Сообщение
#48
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Я думаю, другого способа мы не найдем. Дело в том, что после обработки события рисования родительского виджета, всегда генерируются события рисования для чайлдов. Поэтому, даже если найдется способ, в событии рисования родителя, методом sendEvetn, отрисовать все его чайлды, при выходе они сгенерируются снова, и затрут, то что мы нарисовали. Проигнорировать эти события не получается, т.е.
положительного результата не даст. Фон все равно отрисуется.Так что думаю, придется смириться с двойной перерисовкой каждого виджета. По моему, не так уж это накладно для современных компьютеров. Меня такой вот финт ушами, вполне устраивает. Вы как считаете??? Тем более двойной перерисовки здесь нет. Просто обработчик события рисования вызывается дважды. Сообщение отредактировал igor_bogomolov - 27.5.2009, 16:42 |
|
|
Litkevich Yuriy |
27.5.2009, 17:01
Сообщение
#49
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а что если после собственного рисования, запрещать виджету обновлятся?
setUpdateEnable(false) |
|
|
SABROG |
27.5.2009, 17:32
Сообщение
#50
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
а что если после собственного рисования, запрещать виджету обновлятся? setUpdateEnable(false) В рекурсии поставил setUpdates(false) каждому чайлду, в итоге это привело к тому, что дети просто очистились, ну и окно естественно тоже на котором я пытаюсь что-то нарисовать. Это надо еще как-то отключать auto erase для виджетов. Сообщение отредактировал SABROG - 27.5.2009, 17:34 |
|
|
Текстовая версия | Сейчас: 17.11.2024, 23:08 |