![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
SABROG |
![]() ![]()
Сообщение
#1
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Есть желание рисовать на дочерних окошках, причем хочется оставить их оригинальный render и рисовать поверх уже готовой картинки. Ввиду того, что дочерних элементов может быть сколько угодно, я не могу (а скорее не хочу) унаследоваться от каждого из них. Поэтому я использую installEventFilter.
Получился такой код:
Но не получается. Если убрать первый QObject::eventFilter(o, e);, то виджет рисуется поверх линии, т.е. она остается на заднем плане. Если оставить, то рисуется вообще только одна линия, оригинального изображения виджета нет. paintEvent вызвать напрямую не могу, т.к. он protected, render() и repaint() приводят к рекурсии, естественно. |
|
|
![]() |
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
вообще как я понимаю. если дочерние элементы находятся на хозяине то рисовать на них нет труда в обраьботчике хозяина рисуй и всё. А ты попробуй, ничего не получится. Как ни изгаляйся, а рисование на родителе всегда будет позади детей. Может попробовать рисовать то что хочется на картинке а потом картинку лепить на дочернее окошко. Если ты добавляешь детей в окно, то они отображаются. Если ты их скрываешь через setVisible(false)/hide(), то они естественно не будут вести себя как нормальные видимые дети, события обрабатываться не будут, анимация и обновление происходить не будут. Заставить их прорисоваться через QWidget::render можно, но вот как от них избавиться, чтобы реально их на экране не было - вопрос. На ум приходит что-то типа послать по далеким далеким координатам, за пределы виджета, но тут сразу возникает вопрос с корректировкой координат и событий клавиатуры и мыши. Опять же наверняка будут проблемы. Есть еще вариант с дополнительным виджетом-прослойкой. Эта тема как-раз создана для того, чтобы избежать такого решения, т.к. виджет-прослойка это не рисование, а по сути хак. Я вообще троллей не понимаю в связи с этим, вроде всё можно, вроде рисовать можно как хочешь, а вот поверх всего только в примере overpainting QGlWidget'a. Бред... |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 18.4.2025, 14:46 |