2017-01-12 3 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

당신은 jaggedness가 앤티 앨리어싱에 의한 것이 아니라 오른쪽에서 기본적으로 QWidget이 직사각형 모양을 가지고 있으며 사용자 정의 모양을 얻기 위해 다각형으로 덮여 있지 않은 영역을 마스크해야합니다. 그렇지 않으면 사각형이 그려진 다각형이 있습니다. – RobRobRob