Qt 气球小部件掩码
Qt balloon widget mask
我已经为我的应用程序创建了一个气球小部件。问题是小部件的尖端是锯齿状的,所以我做错了什么?
锯齿状尖端
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);
}
在我看来,锯齿状 不是由抗锯齿提示不起作用引起的,而是遮罩引起的:
QRegion maskRegion(balloonPoly.toPolygon(), Qt::WindingFill);
painter.drawPolygon(balloonPoly);
setMask(maskRegion);
掩码是 1 位透明的/non-transparent。没有办法解决这个问题。
但是
由于您是自己绘制多边形,因此似乎没有理由也使用遮罩。
取下面具并再次检查"jaggedness"。
我找到了锯齿状的原因。我的假设是错误的,我必须掩盖多边形。如果你使用抗锯齿并且只想要一支 1px(化妆笔)的笔,那么顶点坐标必须是 'shifted' x 0.5px 并且 width/height 必须是不均匀的。所以我从宽度和高度中减去 0.5。现在非常流畅
我已经为我的应用程序创建了一个气球小部件。问题是小部件的尖端是锯齿状的,所以我做错了什么?
锯齿状尖端
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);
}
在我看来,锯齿状 不是由抗锯齿提示不起作用引起的,而是遮罩引起的:
QRegion maskRegion(balloonPoly.toPolygon(), Qt::WindingFill);
painter.drawPolygon(balloonPoly);
setMask(maskRegion);
掩码是 1 位透明的/non-transparent。没有办法解决这个问题。
但是
由于您是自己绘制多边形,因此似乎没有理由也使用遮罩。
取下面具并再次检查"jaggedness"。
我找到了锯齿状的原因。我的假设是错误的,我必须掩盖多边形。如果你使用抗锯齿并且只想要一支 1px(化妆笔)的笔,那么顶点坐标必须是 'shifted' x 0.5px 并且 width/height 必须是不均匀的。所以我从宽度和高度中减去 0.5。现在非常流畅