2017-01-12 58 views
1

我爲我的應用程序創建了氣球蒙件。問題是小部件的尖端是鋸齒狀的,所以我做錯了什麼?Qt氣球部件蒙版

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); 
} 

回答

0

我找到了鋸齒的原因。我錯誤地認爲我必須掩蓋多邊形。如果使用抗鋸齒功能,只需要1px(化妝筆)筆,則頂點座標必須「移動」0.5px,而寬度/高度必須不均勻。所以我從我的寬度和高度中減去了0.5。現在它非常平滑

0

它看起來對我說,參差的不被抗鋸齒提示不工作造成,但面膜:

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

面具是1位透明/非-透明。沒有辦法解決這個問題。

既然你自己繪製多邊形,似乎沒有理由使用口罩爲好。

刪除面具並再次檢查「鋸齒」。

+0

你說得對,鋸齒不是由抗鋸齒造成的,但是默認情況下,QWidget有一個矩形形狀,我必須掩蓋沒有被多邊形覆蓋的區域以獲得自定義形狀。否則,我會在其中繪製一個多邊形的矩形。 – RobRobRob