如何在 PyQt 的 QGraphicsViews 中使用自定义绘图?
Posted
技术标签:
【中文标题】如何在 PyQt 的 QGraphicsViews 中使用自定义绘图?【英文标题】:How to use custom drawing in QGraphicsViews in PyQt? 【发布时间】:2010-06-06 03:59:56 【问题描述】:我需要在 2 QGraphicsViews
中查看 QGraphicsScene
,条件是它们对场景中的项目具有不同的比例因子。我找到的最接近的函数是drawItems()
,但据我所知,它必须手动调用。如何自动重绘视图?
我在程序中有这两个代码片段:
class TGraphicsView(QGraphicsView):
def __init__(self, parent = None):
print("__init__")
QGraphicsView.__init__(self, parent)
def drawItems(self, Painter, ItemCount, Items, StyleOptions):
print("drawItems")
Brush = QBrush(Qt.red, Qt.SolidPattern)
Painter.setBrush(Brush)
Painter.drawEllipse(0, 0, 100, 100)
...
Mw.gvNavigation = TGraphicsView(Mw) # Mw - main window
Mw.gvNavigation.setGeometry(0, 0, Size1, Size1)
Mw.gvNavigation.setScene(Mw.Scene)
Mw.gvNavigation.setSceneRect(0, 0, Size2, Size2)
Mw.gvNavigation.show()
__init__
有效,Mw.gvNavigation
被显示,其中有Mw.Scene items
,但drawItems()
没有被调用。
【问题讨论】:
【参考方案1】:QGraphicsView 和 QGraphicsScene 对象上的 drawItems 方法在 Qt 4.6 中已弃用,必须使用 IndirectPainting 标志启用,但我不建议使用已弃用的功能。
这是另一个 stack overflow question 类似的问题。其中一个答案显示了如何使场景中各个项目的绘制方法知道哪个视图正在绘制它们,并在不同视图中绘制时使用不同的绘制代码。
【讨论】:
以上是关于如何在 PyQt 的 QGraphicsViews 中使用自定义绘图?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PyQt6 中检查 MouseButtonPress 事件?