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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Отрисовка поверх виджета  (Прочитано 18037 раз)
SABROG
Гость
« Ответ #15 : Ноябрь 07, 2009, 12:15 »

изиняюсь. моя ошибка Улыбающийся

Код
C++ (Qt)
bs->windowSurface->flush(window(),QRegion(window()->rect()),QPoint(0,0));

Не ну проблему с компиляцией я точно также решил еще вчера, но у меня квадратик за кнопочкой рисуется, причем в некоторых редких случаях он все таки поверх рисуется. То ли я чего-то не убрал, то ли чего-то не добавил...

Хотя код дома остался, а я подзабыл что использовал widget->rect() или window()->rect()...
Записан
jasf
Гость
« Ответ #16 : Ноябрь 07, 2009, 13:42 »

Да нет.. у меня нормально рисуется. но, естесственно, как только виджет перерисуется - прорисовка через windowSurface будет "потёрта" контентом кнопочки. Потом смогу скинуть исходный код.
Записан
igor_bogomolov
Гость
« Ответ #17 : Ноябрь 07, 2009, 15:39 »

У меня же применение ограничивается лишь одним виджетом (а не окном Улыбающийся ).

Всё таки ваше решение мне кажется слишком навороченным. Тем более, что рисовать нужно поверх одного элемента. Ещё один пример использования, предлагаемого выше примера.

Если же для вас дорого перерисовывать сам виджет,  поверх которого  рисуете, лучше разместить поверх него прозрачный виджет, на котором и рисовать. ИМХО.
Записан
jasf
Гость
« Ответ #18 : Ноябрь 07, 2009, 18:22 »

Если же для вас дорого перерисовывать сам виджет,  поверх которого  рисуете, лучше разместить поверх него прозрачный виджет, на котором и рисовать. ИМХО.

Дорого. Поэтому я и поднял тему Улыбающийся В вашем примере ничего нового не нашёл

Код:
bool MyLabel::eventFilter(QObject *obj, QEvent *event)
{
    if( (event->type() == QEvent::Paint) && (obj == this) ) {
        removeEventFilter(this);
        QApplication::sendEvent(obj, event);
        installEventFilter(this);

        QPainter p(qobject_cast<QWidget*>(obj));
        p.drawImage(rect().center() - movie->frameRect().bottomRight(), image);
        return true;
    }
    return false;
}

т.е. опять же отрисовка содержимого виджета, а потом отрисовка поверх.

А Ваше предложение трудновыполнимо. У виджета может быть флаг Qt::WA_OpaquePaintEvent. Значит у нашего прозрачного виджета этот флаг не должен быть установлен по определению (т.к. если установлен данный флаг, все виджеты, находящиеся rect'ально под виджетом с этим флагом, не получают paintEvent ). А если мы будем отрисовываться на прозрачный виджет без этого флага, QEvent::Paint будет перенаправляться на низлижащие виджеты (для восстановления прозрачности), что по сути только утяжеляет прорисовку (из Вашего примера мы лишь отлавливаем эвенты.. а так ещё создаётся один лишний виджет). Улыбающийся
« Последнее редактирование: Ноябрь 07, 2009, 18:28 от jasf » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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