2017-05-28 448 views
0

我正在画一条线,但是如何保持线条'jag'免费且干净?如何平滑pyqt4上的曲线和对角线上的锯齿状边缘?

enter image description here

这是上述绘制图像的代码。在这里,我们可能会注意到图像充满了锯齿状的边缘。

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 
     self.drawingPanel = DrawingPanel(self) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addWidget(self.drawingPanel) 

     self.setLayout(verticalLayout) 
     self.resize(400, 300) 

     self.setWindowTitle('Review') 
     self.show() 


class DrawingPanel(QtGui.QGraphicsView): 

    def __init__(self, parent): 
     super(DrawingPanel, self).__init__(parent) 

     scene = QtGui.QGraphicsScene() 
     self.setScene(scene) 

     pencil = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine) 
     self.scene().addLine(QtCore.QLineF(0, 0, 300, 600), pencil) 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

这里有图片的缩放:

enter image description here

关于它的一些其他问题:

  1. Smoothing jagged edges without anti-aliasing - Unity3D
  2. How to enable anti-aliasing in A-Frame?

回答

1

您必须在QGraphicsView中启用抗锯齿功能:

class DrawingPanel(QtGui.QGraphicsView): 

    def __init__(self, parent): 
     QtGui.QGraphicsView.__init__(self, parent) 
     self.setRenderHint(QtGui.QPainter.Antialiasing) 
     [...] 
+0

谢谢。也可以这样做:'self.setRenderHint(QtGui.QPainter.Alliiasing); self.setRenderHint(QtGui.QPainter.TextAntialiasing); self.setRenderHint(QtGui.QPainter.SmoothPixmapTransform); self.setRenderHint(QtGui.QPainter.HighQualityAlliiasing);'? – user