2017-08-21 2 views
6

Ich kann keinen geeigneten Weg finden, eine glatte geneigte Linie zu zeichnen, ohne dass sie in Qt mit dem Objekt QPainterPath überpixeliert wird.Eine geneigte Linie glätten

Beachten Sie, dass ich weiß, dass es keinen Sinn macht, den Pfad in der paintEvent Funktion zu zeichnen, ich habe es aus Gründen der Einfachheit dort. Ich versuche, die Linie direkt im zentralen Widget zu zeichnen.

Jenseits ist ein Ausschnitt aus meinem Code:

void MyObject::paintEvent(QPaintEvent *) 
{ 
    QPainterPath aPath; 
    aPath.moveTo(40.0, 60.0); //random values to try 
    aPath.lineTo(254, 354.0); 

    QPainter painter(this); 
    painter.setPen(QPen(QColor(20, 20, 200), 10, Qt::SolidLine)); 
    painter.drawPath(aPath); 
} 

Und hier ist das Ergebnis, das ich bekommen:

enter image description here

Es ist schrecklich! Die einzigen schönen Linien, die ich zeichnen kann, sind horizontale, vertikale oder 45 ° geneigte ...

Antwort

4

Wenn Sie nach Zeichnungsqualität suchen, bietet die Qt-Dokumentation eine illustrative example (5.X version) Verwendung ihrer Renderqualität Flags. Im Allgemeinen können Sie flags specified here (5.X version) verwenden und sie mit der Funktion QPainter::setRenderHint() (5.X version) einstellen. Sehen Sie, ob Sie mit diesen Methoden die gewünschte Qualität erreichen können. Für Ihren Code würden Sie etwas wie

QPainter painter(this); 
painter.setRenderHint(QPainter::SmoothPixmapTransform, true); 
painter.setRenderHint(QPainter::HighQualityAntialiasing, true); 
painter.setPen(QPen(QColor(20, 20, 200), 10, Qt::SolidLine)); 
painter.drawPath(aPath); 
+0

suchen Sie besser die relevanten Teile direkt in der Frage enthalten. Links können jederzeit brechen – user463035818

+0

Ich habe einen bestimmten Code als Beispiel hinzugefügt, aber die Qt-Dokumentation der ersten Partei geht viel detaillierter als ich hier vernünftig schreiben kann – csunday95

+0

Der QPainter :: Antialiasing-Hinweis hat den Trick gemacht. Danke, das Ergebnis sieht jetzt genau so aus, wie ich es wollte. – Getter