bool QChildWidget::eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::Paint){ QWidget *w = static_cast<QWidget*>(o); for (QWidget *p = parentWidget(); p; p = p->parentWidget()){ const QPixmap *bg = p->backgroundPixmap(); if (bg){ QPoint pos = w->mapToGlobal(QPoint(0, 0)); pos = p->mapFromGlobal(pos); QRect rc(pos.x(), pos.y(), w->width(), w->height()); if (rc != rcChild){ rcChild = rc; QPixmap new_bg(w->width(), w->height()); QPainter pp(&new_bg); pp.drawTiledPixmap(0, 0, w->width(), w->height(), *bg, pos.x(), pos.y()); pp.end(); w->setBackgroundPixmap(new_bg); } if (w->backgroundPixmap()){ QPainter pp(w); pp.drawPixmap(0, 0, *w->backgroundPixmap()); } return true; } } } return false; }
bool QChildWidget::eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::Paint){ QWidget *w = static_cast<QWidget*>(o); for (QWidget *p = parentWidget(); p; p = p->parentWidget()){ const QPixmap bg = p->palette().brush(p->backgroundRole()).texture(); if (!bg.isNull()){ QPoint pos = w->mapToGlobal(QPoint(0, 0)); pos = p->mapFromGlobal(pos); QRect rc(pos.x(), pos.y(), w->width(), w->height()); if (rc != rcChild){ rcChild = rc; QPixmap new_bg(w->width(), w->height()); QPainter pp(&new_bg); pp.drawTiledPixmap(0, 0, w->width(), w->height(), bg, pos.x(), pos.y()); pp.end(); QPalette palette = w->palette(); palette.setBrush(w->backgroundRole(), QBrush(new_bg)); w->setPalette(palette); } if (!w->palette().brush(w->backgroundRole()).texture().isNull()){ QPainter pp(w); pp.drawPixmap(0, 0, w->palette().brush(w->backgroundRole()).texture()); } return true; } } } return false; }