gpt4 book ai didi

python - 为什么 itemAt() 并不总能找到 QGraphicsItem

转载 作者:行者123 更新时间:2023-11-28 21:57:42 30 4
gpt4 key购买 nike

考虑这个极其简单的示例,您可以在其中围绕 QGraphicsScene 拖动一个正方形(使用 PyQt,C++ 用户将 self 读作 this)

import sys
from PyQt4 import QtGui, QtCore

class MainWindowUi(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.scene = Scene(0, 0, 300, 300, self)
self.view = QtGui.QGraphicsView()
self.setCentralWidget(self.view)
self.view.setScene(self.scene)
self.scene.addItem(Square(0,0,50,50))

class Scene(QtGui.QGraphicsScene):

def mousePressEvent(self, e):
self.currentItem = self.itemAt(e.pos())
print (self.currentItem)
QtGui.QGraphicsScene.mousePressEvent(self, e)

class Square(QtGui.QGraphicsRectItem):
def __init__(self, *args):
QtGui.QGraphicsRectItem.__init__(self, *args)
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
win = MainWindowUi()
win.show()
sys.exit(app.exec_())

当您在场景中单击鼠标时,您应该会看到一条打印语句,告诉您您单击了正方形或什么都没有(即无)。如果您只是启动程序并单击正方形,这将起作用。

现在将正方形拖离左上角并再次单击它。这次 itemAt() 返回 None,即使您点击正方形也是如此。

这是怎么回事?

最佳答案

答案似乎是我应该使用 self.itemAt(e.scenePos()) 而不是 self.itemAt(e.pos())。我在 this SO question 中找到了这个.

我在这里指出,我一直无法找到有关此问题的信息的原因是在 QGraphicsScene 中移动 QGraphicsItems 不是 Qt 所谓的“拖放”。要搜索有关此主题的信息,您需要搜索“移动 QGraphicsItem”之类的内容。

关于python - 为什么 itemAt() 并不总能找到 QGraphicsItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19486478/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com