| 31 | borderColor = QColor(58, 58, 90) |
| 32 | |
| 33 | def __init__(self, *args, **kwargs): |
| 34 | super(GraphicsView, self).__init__(*args, **kwargs) |
| 35 | self.resize(800, 600) |
| 36 | # 设置背景颜色 |
| 37 | self.setBackgroundBrush(self.backgroundColor) |
| 38 | ''' |
| 39 | #参考 http://doc.qt.io/qt-5/qgraphicsview.html#CacheModeFlag-enum |
| 40 | CacheNone 不使用缓存 |
| 41 | CacheBackground 缓存背景 |
| 42 | ''' |
| 43 | self.setCacheMode(self.CacheBackground) |
| 44 | ''' |
| 45 | #参考 http://doc.qt.io/qt-5/qgraphicsview.html#DragMode-enum |
| 46 | NoDrag 什么都没发生; 鼠标事件被忽略。 |
| 47 | ScrollHandDrag 光标变成指针,拖动鼠标将滚动滚动条。 该模式可以在交互式和非交互式模式下工作。 |
| 48 | RubberBandDrag 拖动鼠标将设置橡皮筋几何形状,并选择橡皮筋所覆盖的所有项目。 对于非交互式视图,此模式被禁用。 |
| 49 | ''' |
| 50 | self.setDragMode(self.ScrollHandDrag) |
| 51 | ''' |
| 52 | #参考 http://doc.qt.io/qt-5/qgraphicsview.html#OptimizationFlag-enum |
| 53 | DontClipPainter 已过时 |
| 54 | DontSavePainterState 渲染时,QGraphicsView在渲染背景或前景时以及渲染每个项目时保护painter状态(请参阅QPainter.save())。 这允许你离开painter处于改变状态(即你可以调用QPainter.setPen()或QPainter.setBrush(),而不需要在绘制之后恢复状态)。 但是,如果项目一致地恢复状态,则应启用此标志以防止QGraphicsView执行相同的操作。 |
| 55 | DontAdjustForAntialiasing 禁用QGraphicsView的抗锯齿自动调整曝光区域。 在QGraphicsItem.boundingRect()的边界上渲染反锯齿线的项目可能会导致渲染部分线外。 为了防止渲染失真,QGraphicsView在所有方向上将所有曝光区域扩展2个像素。 如果启用此标志,QGraphicsView将不再执行这些调整,最大限度地减少需要重绘的区域,从而提高性能。 一个常见的副作用是,使用抗锯齿功能进行绘制的项目可能会在移动时在画面上留下绘画痕迹。 |
| 56 | IndirectPainting 从Qt 4.6开始,恢复调用QGraphicsView.drawItems()和QGraphicsScene.drawItems()的旧绘画算法。 仅用于与旧代码的兼容性。 |
| 57 | ''' |
| 58 | self.setOptimizationFlag(self.DontSavePainterState) |
| 59 | ''' |
| 60 | #参考 http://doc.qt.io/qt-5/qpainter.html#RenderHint-enum |
| 61 | Antialiasing 抗锯齿 |
| 62 | TextAntialiasing 文本抗锯齿 |
| 63 | SmoothPixmapTransform 平滑像素变换算法 |
| 64 | HighQualityAntialiasing 请改用Antialiasing |
| 65 | NonCosmeticDefaultPen 已过时 |
| 66 | Qt4CompatiblePainting 从Qt4移植到Qt5可能有用 |
| 67 | ''' |
| 68 | self.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing | |
| 69 | QPainter.SmoothPixmapTransform) |
| 70 | if QGLFormat.hasOpenGL(): |
| 71 | self.setRenderHint(QPainter.HighQualityAntialiasing) |
| 72 | ''' |
| 73 | #当视图被调整大小时,视图如何定位场景。使用这个属性来决定当视口控件的大小改变时,如何在视口中定位场景。 缺省行为NoAnchor在调整大小的过程中不改变场景的位置; 视图的左上角将显示为在调整大小时被锚定。请注意,只有场景的一部分可见(即有滚动条时),此属性的效果才明显。 否则,如果整个场景适合视图,QGraphicsScene使用视图对齐将视景中的场景定位。 |
| 74 | #参考 http://doc.qt.io/qt-5/qgraphicsview.html#ViewportAnchor-enum |
| 75 | NoAnchor 视图保持场景的位置不变 |
| 76 | AnchorViewCenter 视图中心被用作锚点。 |
| 77 | AnchorUnderMouse 鼠标当前位置被用作锚点 |
| 78 | ''' |
| 79 | self.setResizeAnchor(self.AnchorUnderMouse) |
| 80 | ''' |
| 81 | Rubber选择模式 |
| 82 | #参考 http://doc.qt.io/qt-5/qt.html#ItemSelectionMode-enum |
| 83 | ContainsItemShape 输出列表仅包含形状完全包含在选择区域内的项目。 不包括与区域轮廓相交的项目。 |
| 84 | IntersectsItemShape 默认,输出列表包含其形状完全包含在选择区域内的项目以及与区域轮廓相交的项目。 |
| 85 | ContainsItemBoundingRect 输出列表仅包含边界矩形完全包含在选择区域内的项目。 不包括与区域轮廓相交的项目。 |
| 86 | IntersectsItemBoundingRect 输出列表包含边界矩形完全包含在选择区域内的项目以及与区域轮廓相交的项目。 这种方法通常用于确定需要重绘的区域。 |
| 87 | ''' |
| 88 | self.setRubberBandSelectionMode(Qt.IntersectsItemShape) |
| 89 | ''' |
| 90 | #在转换过程中如何定位视图。QGraphicsView使用这个属性决定当变换矩阵改变时如何在视口中定位场景,并且视图的坐标系被变换。 默认行为AnchorViewCenter确保在视图中心的场景点在变换过程中保持不变(例如,在旋转时,场景将围绕视图的中心旋转)。请注意,只有场景的一部分可见(即有滚动条时),此属性的效果才明显。 否则,如果整个场景适合视图,QGraphicsScene使用视图对齐将视景中的场景定位。 |