【问题标题】:How do I draw a semi-transparent rectangle in Qt?如何在 Qt 中绘制半透​​明矩形?
【发布时间】:2012-06-20 00:27:44
【问题描述】:

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

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

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 下构建它。

【问题讨论】:

  • Qt docs 中没有 QBrush(r, g, b, a) 构造函数。你的意思是QColor
  • 我做到了,是的。我的错。
  • 完整的PageView::paintEventpastebin.com/Dj9dDd0c。虽然我不认为我遗漏的内容有什么有趣的地方。

标签: c++ qt user-interface


【解决方案1】:

该代码对我有用,只需稍作修改,因为它不会像您所拥有的那样编译:

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

注意:

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

【讨论】:

  • Rightio,在我提交的问题中输入。但这会为我生成实心矩形,而不是半透明的。
  • 您是否尝试过调用fillRect(),就像我在这里使用QBrush 一样?
  • 看起来你正在那里循环绘画。如果你在同一个地方多次绘制那个半透明的矩形,它最终会是实心的。
  • 是的,这正是问题所在。感谢您的帮助!
猜你喜欢
  • 2012-01-16
  • 2021-04-10
  • 1970-01-01
  • 2016-05-25
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多