Python 为什么itemAt()不总是找到QGraphicsItem 考虑这个非常简单的例子,你可以在QGoogleScS场景中拖动一个正方形(使用PyQt、C++用户读自己 > < >
当您在场景中单击鼠标时,您应该会看到一条打印语句,告诉您您单击了正方形或没有(即无)。如果你只需启动程序并点击方块,这个功能就可以实现 现在从左上角拖动正方形,然后再次单击它。这一次,itemAt()即使单击正方形也不返回任何值Python 为什么itemAt()不总是找到QGraphicsItem 考虑这个非常简单的例子,你可以在QGoogleScS场景中拖动一个正方形(使用PyQt、C++用户读自己 > < >,python,qt,pyqt,pyqt4,Python,Qt,Pyqt,Pyqt4,当您在场景中单击鼠标时,您应该会看到一条打印语句,告诉您您单击了正方形或没有(即无)。如果你只需启动程序并点击方块,这个功能就可以实现 现在从左上角拖动正方形,然后再次单击它。这一次,itemAt()即使单击正方形也不返回任何值 怎么回事?答案似乎是我应该使用self.itemAt(e.scenePos())而不是self.itemAt(e.pos())。这是我在家里找到的 我在这里注意到,我一直难以找到关于这个问题的信息的原因是,在QGraphicscene中移动QGraphicsSitems
怎么回事?答案似乎是我应该使用
self.itemAt(e.scenePos())
而不是self.itemAt(e.pos())
。这是我在家里找到的
我在这里注意到,我一直难以找到关于这个问题的信息的原因是,在QGraphicscene中移动QGraphicsSitems并不是Qt所说的“拖放”。要搜索有关此主题的信息,您需要搜索诸如“move QGraphicsItem”之类的内容。检查项上的SceneBondingDirect()是否返回合理的值对Square实例调用SceneBondingDirect()的结果会产生合理的结果。然而,在这样做的时候,我意识到当正方形的位置与(0,0)不同时,就会发生我原来文章中描述的失败。这是不是有些有趣的事情,因为正方形在场景的边界矩形之外,所以场景没有得到正方形?这会让我感到惊讶,因为我制作了300x300的场景。。。
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_())