我正在尝试在具有白色背景的QFrame上绘制两个具有相同颜色和透明度的矩形。这些矩形应该重叠,它们的透明度不应该改变(也在重叠区域)。像这样:
这是我到目前为止的代码:
class Canvas : public QFrame
{
public:
void paintEvent(QPaintEvent * event) override;
};
void Canvas::paintEvent(QPaintEvent *event)
{
QPainter painter( this );
painter.setPen(QPen(Qt::NoPen));
painter.setBrush(QBrush(QColor(0,0,255,125)));
painter.drawRect(QRect(10,10,100,100));
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.setBrush(QBrush(QColor(0, 0, 255, 125)));
painter.drawRect(QRect(80, 80, 100, 100));
}
int main( int argc, char **argv )
{
QApplication a( argc, argv );
Canvas canvas;
canvas.setAutoFillBackground(true);
QPalette pal;
pal.setColor(QPalette::Window, QColor(Qt::red));
canvas.setBackgroundRole(QPalette::Window);
canvas.setPalette(pal);
canvas.show();
return a.exec();
}
然而,这会产生以下图像:
我已经为画家尝试了所有可能的构图模式,但似乎都没有给我预期的效果。我猜CompositionMode_Source是正确的,因为如果我使用以下代码:
QPixmap pixmap(200, 200);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setPen(QPen(Qt::NoPen));
painter.setBrush(QBrush(QColor(0, 0, 255, 125)));
painter.drawRect(QRect(10, 10, 100, 100));
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.setBrush(QBrush(QColor(0, 0, 255, 125)));
painter.drawRect(QRect(80, 80, 100, 100));
QLabel label;
label.setPixmap(pixmap);
label.show();
我确实得到了预期的效果(但没有红色背景):
但是,如果我将填充更改为Qt :: red,我会再次:
我在这里缺少什么?我怎样才能达到理想的效果?实际的应用是我想在QFrame派生类上绘制矩形,该类在我受限制的第三方lib中实现。
答案 0 :(得分:4)
我发现代码有三个问题: