ugluk
20th February 2012, 13:26
Why doesn't this code work? I'd like to create the wet floor effect with Qt and I am painting on a QWidget.
painter.save();
reflectionGradient.setColorAt(.0f, QColor(0, 0, 0, 0));
reflectionGradient.setColorAt(1.0f, QColor(0, 0, 0, 255));
reflectionGradient.setFinalStop(0, pixmap.height());
painter.setCompositionMode(QPainter::CompositionMo de_DestinationIn);
painter.fillRect(pixmap.rect(), reflectionGradient);
painter.setCompositionMode(QPainter::CompositionMo de_DestinationOver);
painter.drawPixmap(zero, pixmap);
painter.restore();
Added after 16 minutes:
I think I have the answer:
int QPaintDevice::depth () const
returns 24, hence no destination alpha. Is it possible to force destination alpha to 32 somehow, or work around this limitation, without creating a temporary QPixmap or QImage.
painter.save();
reflectionGradient.setColorAt(.0f, QColor(0, 0, 0, 0));
reflectionGradient.setColorAt(1.0f, QColor(0, 0, 0, 255));
reflectionGradient.setFinalStop(0, pixmap.height());
painter.setCompositionMode(QPainter::CompositionMo de_DestinationIn);
painter.fillRect(pixmap.rect(), reflectionGradient);
painter.setCompositionMode(QPainter::CompositionMo de_DestinationOver);
painter.drawPixmap(zero, pixmap);
painter.restore();
Added after 16 minutes:
I think I have the answer:
int QPaintDevice::depth () const
returns 24, hence no destination alpha. Is it possible to force destination alpha to 32 somehow, or work around this limitation, without creating a temporary QPixmap or QImage.