Qt气球小部件面具

时间:2017-01-12 09:43:50

标签: c++ qt qwidget

我为我的应用程序创建了一个气球小部件。问题是小部件的尖端是锯齿状的,所以我做错了什么?

Jagged tip

void BalloonWidget::paintEvent(QPaintEvent *)
{   
    QVector<QPointF> vertices;
    vertices << QPointF(0, 0)
             << QPointF(width(), 0)
             << QPointF(width(), height() * 0.8)
             << QPointF(width() * 0.60, height() * 0.8)
             << QPointF(width() * 0.5, height())
             << QPointF(width() * 0.40, height() * 0.8)
             << QPointF(0, height() * 0.8);

    balloonPoly = QPolygonF(vertices);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setRenderHint(QPainter::HighQualityAntialiasing, true);
    painter.setBrush(QBrush(backgroundColor));

    QRegion maskRegion(balloonPoly.toPolygon(), Qt::WindingFill);  
    painter.drawPolygon(balloonPoly);
    setMask(maskRegion);
}

2 个答案:

答案 0 :(得分:0)

在我看来,由于抗锯齿提示不起作用而导致的锯齿状没有引起,但掩码:

QRegion maskRegion(balloonPoly.toPolygon(), Qt::WindingFill);  
painter.drawPolygon(balloonPoly);
setMask(maskRegion);

屏蔽是1位透明/不透明。无法解决此问题。

<强> BUT

由于您自己绘制多边形,因此似乎没有理由使用蒙版。

移除面具并检查&#34;锯齿状&#34;试。

答案 1 :(得分:0)

我找到了锯齿状的原因。我错误地认为我必须掩盖多边形。如果您使用抗锯齿并且只需要1px(化妆笔)笔,则顶点坐标必须“移位”0.5px并且宽度/高度必须不均匀。所以我从宽度和高度减去0.5。现在它非常流畅