可動で選択可能なグラフィックアイテムをいくつか作成する必要があります。アイテムは、別のアイテムが選択されるか、ユーザーがシーンの空の部分をクリックしてすべてのアイテムの選択を解除するまで、選択されたままになります。選択したアイテムは、選択されていないアイテムと異なって見える必要があります。メインウィンドウの任意のウィジェットは、グラフィックアイテムが選択されているかどうかを問い合わせることができます。PySideを使用してQGraphicsSceneの項目を選択しますか?
このコードでは、アイテムを選択して画面上を移動できます。移動したときにアイテムが赤く:ここ
import sys
from PySide 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(Line(25,25,25,50))
self.scene.addItem(Line(30,30,30,70))
self.scene.addItem(Line(35, 40, 35, 65))
class Scene(QtGui.QGraphicsScene):
pass
class Line(QtGui.QGraphicsLineItem):
def __init__(self, *args):
QtGui.QGraphicsLineItem.__init__(self)
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)
self.setPen(QtGui.QPen(QtCore.Qt.black, 3))
def mousePressEvent(self, e):
self.setPen(QtGui.QPen(QtCore.Qt.red, 5))
QtGui.QGraphicsLineItem.mousePressEvent(self, e)
def mouseReleaseEvent(self, e):
self.setPen(QtGui.QPen(QtCore.Qt.black, 3))
QtGui.QGraphicsLineItem.mouseReleaseEvent(self, e)
if __name__ == '__main__':
a = QtGui.QApplication(sys.argv)
m = MainWindowUi()
m.show()
sys.exit(a.exec_())
は私の質問です:Qtの中で
、リリースされたときに移動し、非選択時に選択したグラフィックアイテムですか!
マウスをリリースしてもグラフィックアイテムはどのように選択されていますか?たとえば、self.selectedという "Line"にブール変数を作成する必要がありますか?
アプリケーションは、どのグラフィックアイテムが選択され、それらを区別することができますか?たとえば、クラス "Line"の各項目に一意のIDが割り当てられているか、Qtは既にそれを実行していますか? Qtの中で
ありがとうございます。 'item.setData()'のあなたのデモも非常に便利です。 –