QPaintEvent, installEventFilter, QPainter, Overpainting |
Здравствуйте, гость ( Вход | Регистрация )
QPaintEvent, installEventFilter, QPainter, Overpainting |
SABROG |
27.5.2009, 22:05
Сообщение
#61
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Меня не столько исходники интересуют, сколько скриншот с результатом
|
|
|
igor_bogomolov |
28.5.2009, 1:17
Сообщение
#62
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Меня не столько исходники интересуют, сколько скриншот с результатом ??? Какой от него толк, от скриншота?Исходники прилагаю, скриншот есть. Картинку сам поменяешь, если что. У меня их просто нет.
Прикрепленные файлы
|
|
|
Litkevich Yuriy |
28.5.2009, 4:18
Сообщение
#63
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Вот для эфекта затемнения я бы просто палитру окошка менял перед паказом диалога. И альфа канал бы не использовал, за ненадобностью. Т.к. само окошко все равно не прозрачное.
|
|
|
SABROG |
28.5.2009, 8:23
Сообщение
#64
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Вот для эфекта затемнения я бы просто палитру окошка менял перед паказом диалога. И альфа канал бы не использовал, за ненадобностью. Т.к. само окошко все равно не прозрачное. Я думал над этим, но это не решение, а обход реальной задачи. igor_bogomolov, думаю я теперь созрел, чтобы принять этот вариант как окончательный на данный момент. Можно начать писать статью в wiki. Осталось лишь подумать еще над возможностью добавить прозрачную анимацию. Сообщение отредактировал SABROG - 28.5.2009, 8:23 |
|
|
igor_bogomolov |
28.5.2009, 8:40
Сообщение
#65
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Осталось лишь подумать еще над возможностью добавить прозрачную анимацию. Я вчера ночью, перед тем как выложить пример, немного поэксперементировал. Как раз таки хотел сделать сюрприз и выложить демку с эфектом падающего снега. Сделал 5 прозрачных пнг-шег с хаотично расположенными снижинками. По таймеру - перерисовывал эти картинки, вызывая update() для окна. Оказалось, что таким образом перерисовываются только те виджеты у которых свойство setAutoFillBackground(false). Виджеты с установленным свойством в true, почему то перерисовку игнорируют. Так что у меня вопрос - чем отличаются события перерисовки через update() и от тех событий которые происходят при ресайзе? |
|
|
Litkevich Yuriy |
28.5.2009, 8:58
Сообщение
#66
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
чем отличаются события перерисовки через update() и от тех событий которые происходят при ресайзе? на память: update() - групирует события поэтому его рекомендуют использовать для повышения производительности. Т.е. пачка из нескольких событий рисования будет превращена в одно.Цитата void QWidget::update () [slot] тык... This function does not cause an immediate repaint; instead it schedules a paint event for processing when Qt returns to the main event loop. This permits Qt to optimize for more speed and less flicker than a call to repaint() does. Calling update() several times normally results in just one paintEvent() call. Цитата void QWidget::repaint () [slot] тыкRepaints the widget directly by calling paintEvent() immediately, unless updates are disabled or the widget is hidden. We suggest only using repaint() if you need an immediate repaint, for example during animation. In almost all circumstances update() is better, as it permits Qt to optimize for speed and minimize flicker. Warning: If you call repaint() in a function which may itself be called from paintEvent(), you may get infinite recursion. The update() function never causes recursion. на память немного промазал, групируются не события, а вызовы update() |
|
|
igor_bogomolov |
28.5.2009, 11:02
Сообщение
#67
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Все поправил. Теперь и анимация работает нормально.
Прилагаю изменёный проектик. В нем по таймеру перерисовываются звездочки. Получается как анимация. При нажатии на кнопку рисуется затемненный прозрачный фон. SABROG, у меня на работе нет возможности сделать гифку, если нетрудно, скомпилируй проектик, засними, и размести здесь. Что бы вроде как итог подвести. Ну и теперь на самом деле можешь писать статью Сообщение отредактировал igor_bogomolov - 28.5.2009, 11:04
Прикрепленные файлы
|
|
|
SABROG |
28.5.2009, 11:20
Сообщение
#68
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Написал в wiki как смог, если есть желающие добавить или поправить - милости прошу. Сообщение отредактировал SABROG - 28.5.2009, 12:48 |
|
|
SABROG |
28.5.2009, 12:52
Сообщение
#69
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
wasyota мне дал любопытную ссылочку http://www.qtcentre.org/forum/f-qt-program...lter-12287.html
|
|
|
igor_bogomolov |
28.5.2009, 13:04
Сообщение
#70
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
wasyota мне дал любопытную ссылочку http://www.qtcentre.org/forum/f-qt-program...lter-12287.html Я еще с утра это посмотрел. Что толку. В Qt PostEventFilter пока нет. Но реализацию было бы все равно интересно посмотреть. Приатач сюда posteventfilter.h, а то неохото региться там только из-за этого
|
|
|
Текстовая версия | Сейчас: 28.11.2024, 21:03 |