如何在Qt中绘制半透​​明矩形?

时间:2012-06-18 01:08:05

标签: c++ qt user-interface

我正在尝试在图像顶部绘制一个半透明矩形作为高光。不幸的是,我尝试的任何东西似乎都无法执行我想要的透明效果。相反,我只是得到实心填充的矩形,没有透明度。

这就是我现在正在做的事情:

void PageView::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QImage img=...;

    painter.drawImage(0, 0, img);
    ...
    // draw a light blue, transparent rectangle to highlight
    QRect rect=...;
    painter.fillRect(rect, QColor(128, 128, 255, 128));
    ...
}

不幸的是,对我来说,这会绘制一个实体蓝色矩形,而不是我期望的半透明矩形,因为它会给QBrush一个alpha值。

我还尝试绘制到中级QImageQPixMap,并使用painter.setCompositionMode(...)。到目前为止没有运气。

因此我的问题是:我如何说服Qt在我的PageView上画一个半透明的矩形?

编辑:如果它是相关的,我是在Windows下的Qt 4.8.1下构建的。

1 个答案:

答案 0 :(得分:14)

代码对我有用,稍加修改,因为它不能像你一样编译:

painter.fillRect(rect, QBrush(QColor(128, 128, 255, 128)));

注意:

OP正在循环中绘制半透​​明矩形,导致同一区域被多次绘制。这将产生一种附加效应,最终会使该区域看起来与实心填充相同。