这是示波器。我想要一个圆形的绿色窗户,上面有一个十字线。
如果我直接这样做,我会用黑色填充矩形,在其中绘制一个0-alpha椭圆,然后简单地将其合成到另一个像素图上,其中在我绘制了范围轨迹后像素设置为绿色在绿色像素图上。
它似乎不会那样工作。我可以用透明度填充像素图:
m_grdPixmap.fill(Qt::transparent);
果然,我得到了一个完全透明的像素图。即使我用rgba构建一支笔,我也似乎无法在其上画任何东西。它固执地保持透明。
如果我反过来这样做,就是用黑色填充它:
m_grdPixmap.fill(QColor::fromRgb(0, 0, 0));
然后尝试使用(我希望是一个)透明笔在其上绘制一个椭圆,它固执地保持不透明:
painter.setPen(qRgba(0,0,0,0));
...或...
painter.setPen(qRgba(0,0,0,255));
我确定我错过了什么。这应该很简单,对吧?
答案 0 :(得分:0)
以下是您必须做的事情:
将像素图清除为完全透明,这是一个神奇的步骤,对最终图像的像素内容毫无意义,除非你不这样做,没有任何作用:
m_grdPixmap.fill(QColor::fromRgb(0,0,0,0));
然后用你想要形成“窗口环绕”的实际颜色填充它,不透明:
qb = QBrush(QColor::fromRgb(0,0,0,255));
painter.setBrush(qb);
painter.drawRect(0,0,w,h);
然后打出透明椭圆(此处为绿色,但无关紧要):
qb = QBrush(QColor::fromRgb(0,255,0,0));
painter.setOpacity(1.0);
painter.setBrush(qb);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.drawEllipse(center,(int)aw,(int)aw);
然后在想要“窗口”显示的实际场景中合成它:
painter.begin(&m_scopePixmap);
painter.drawPixmap(0,0,m_grdPixmap);
......这是模糊的,不透明的,近乎我能说出来的,没有文件记录。
但它确实如此。它有效。