我正在使用Qt Designer和PyQt4创建一个应用程序。我想知道如何将图像添加到QtGraphicsView
窗口小部件到我想要的位置。
例如,当我点击QtGraphicsView
小部件时,我想将图像添加到该确切位置。我在网上搜索过,但找不到任何帮助。
我创建了一个场景子类来管理将在QtGraphicsView
窗口小部件中显示的项目。我能够得到我点击的地方的坐标,但我不知道如何将项目放在该特定位置。以下是我的代码:
class graphicsScene(QtGui.QGraphicsScene):
def __init__(self, parent=None):
super(graphicsScene, self).__init__(parent)
def mousePressEvent(self, event):
position = QtCore.QPointF(event.scenePos())
pixmap = QtGui.QPixmap("host.png")
pixmap_scaled = pixmap.scaled(30, 30, QtCore.Qt.KeepAspectRatio)
self.itemAt(pixmap_scaled,position.x(),position.y())
self.addPixmap(pixmap_scaled)
print "pressed here: " + str(position.x()) + ", " + str(position.y())
self.update()
def mouseReleaseEvent(self, event):
position = QtCore.QPointF(event.scenePos())
print "released here: " + str(position.x()) + ", " + str(position.y())
self.update()
class form(QtGui.QMainWindow):
def __init__(self):
super(mininetGUI, self).__init__()
self.ui = uic.loadUi('form.ui')
self.scene = graphicsScene()
self.ui.view.setScene(self.scene)
答案 0 :(得分:0)
使用addItem(your_pixmap_object)
将QPixmap
添加到场景中。然后,您可以在返回的setPos(...)
上使用QGraphicsItem
(当您使用addItem(...)
时会返回此项,并且该项目已成功插入到场景中。)您传递给{的点{1}}将成为事件的一部分(正如您已经通过调用setPos(...)
所做的那样)。
event.scenePos()
如果您想使用pixmap = QPixmap(...)
sceneItem = self.addItem(pixmap)
sceneItem.setPos(event.scenePos())
,则此过程与上述过程相同,但只需使用QGraphicsPixmapItem
,就像您在代码中所做的那样。
除了放置项目之外,还有一件事你可能想要处理 - 在你按下鼠标按钮的情况下,在按下按钮的同时将光标移动到场景中的其他位置,然后释放它。这会将项目插入到移动事件的起始位置(按下按钮并移动),但这可能不是您想要做的。您必须考虑是否更好地处理self.addPixmap(...)
内部的插入。这实际上取决于你希望这个特定场景的工作方式。