各タブに QGraphicsView を使用して MDI アプリケーションを作成しています。アイテムを追加して移動すると、グループができます。しかし、次のような多くの問題があります。
オブジェクトの 1 回限りの割り当て。一部のオブジェクトをラバー バンドで選択し、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()