我正在每个选项卡上使用 QGraphicsView 编写一个 MDI 应用程序。我添加项目,移动它们并且有一个组。但是也有很多问题,比如:
对象的一次性分配。我不能用橡皮筋选择一些对象并按住 Shift 键以添加到其他橡皮筋选择的选择中。例如,如果在新分配之前记住旧对象并在之前的分离之后添加它,则可以这样做。但它是通过鼠标事件完成的,它们根本不起作用
当您单击对象执行某些操作时是必需的,但它也可以通过鼠标事件完成...
我需要鼠标滚轮来缩放,然后依靠鼠标事件
可能所有这些动作在鼠标事件中没有现成的解决方案zalezaniya,但我发现的所有教训 - 说唯一的鼠标事件会拯救我
如何让 QGraphicsView 捕捉鼠标事件?
import os
import sys
import sip
import maya.OpenMayaUI as mui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#----------------------------------------------------------------------
def getMayaWindow():
ptr = mui.MQtUtil.mainWindow()
return sip.wrapinstance(long(ptr), QObject)
#----------------------------------------------------------------------
#----------------------------------------------------------------------
class MainForm(QMainWindow):
def __init__(self):
super(MainForm, self).__init__(getMayaWindow())
self.setGeometry(50,50,600,600)
widget = QWidget()
self.setCentralWidget(widget)
layout = QGridLayout()
widget.setLayout(layout)
mdiArea = QMdiArea()
layout.addWidget(mdiArea)
newItem1 = vrayRectWidget(mdiArea, 'aaaa')
newItem2 = vrayRectWidget(mdiArea, 'bbbb')
newItem1.setMouseTracking(True)
newItem2.setMouseTracking(True)
#----------------------------------------------------------------------
#----------------------------------------------------------------------
class vrayRectWidget(QMdiSubWindow):
def __init__(self, parent, name):
super(vrayRectWidget, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
self.setWindowTitle(name)
self.view = MyView()
self.view.setMouseTracking(True)
self.setWidget(self.view)
#----------------------------------------------------------------------
#----------------------------------------------------------------------
class MyView(QGraphicsView):
def __init__(self):
QGraphicsView.__init__(self)
self.setGeometry(QRect(100, 100, 600, 400))
self.setDragMode(QGraphicsView.RubberBandDrag)
self.setRubberBandSelectionMode(Qt.IntersectsItemShape)
self.setMouseTracking(True)
self.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
self.scene = QGraphicsScene(self)
self.scene.setSceneRect(QRectF())
self.setScene(self.scene)
self.setInteractive(True)
for i in range(5):
item = QGraphicsEllipseItem(i*75, 10, 60, 40)
item.setFlag(QGraphicsItem.ItemIsMovable, True)
item.setFlag(QGraphicsItem.ItemIsSelectable, True)
self.scene.addItem(item)
def mousePressEvent(self, event):
print('mousePressEvent')
#----------------------------------------------------------------------
#----------------------------------------------------------------------
# window
def cacheWnd():
wnd = MainForm()
wnd.show()
cacheWnd()