1

シーン内でqgraphicsitemをドラッグするには、いくつかの方法があります。しかし、私にとって最も興味深いのは、フラグ「itemIsMovable」を付けることです。これは、Qtライブラリでより「ネイティブ」になるはずだからです。

私の質問は; アイテムがドラッグされている間、その位置を印刷する方法は何ですか?すでにフラグを立てていることを忘れないでください。アイテムは移動しており、位置はどこかに戻っています。

ダウンはその一例です。問題は、長方形と円の間の接続線をインタラクティブに更新する方法です(ツールバーアイコンを使用して、接続線で円を追加します)。

import sys
from PySide import QtCore, QtGui

class drawCircle(QtGui.QGraphicsItem):
    def __init__(self, scene):
        self.Circle = QtGui.QGraphicsEllipseItem(-20, -20, 40, 40)
        self.Circle.setPos(50,50)
        self.Circle.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
        scene.addItem(self.Circle)

        self.Line = QtGui.QGraphicsLineItem(-20, -20, 40, 40)
        self.Line.setLine(0, 0, self.Circle.pos().x(), self.Circle.pos().y())
        scene.addItem(self.Line)

class winScene(QtGui.QGraphicsScene):
    def __init__(self):
        super(winScene, self).__init__()
        self.setSceneRect(0,0,450,200)
        self.addItem(QtGui.QGraphicsRectItem(-20, -20, 40, 40))

class SceneWindow(QtGui.QMainWindow):
    def __init__(self):
        super(SceneWindow, self).__init__()
        self.DefineSceneWindow()

    def DefineSceneWindow(self):
        self.SchSc = winScene()
        view = QtGui.QGraphicsView(self.SchSc)
        view.setRenderHint(QtGui.QPainter.Antialiasing)
        view.scale(1,1)
        self.setCentralWidget(view)
        self.setGeometry(0, 300, 500, 300)
        self.show()

        self.drRect = QtGui.QAction(QtGui.QIcon('paint_brush.png'), 'Draw Circle', self)
        self.drRect.setShortcut('Ctrl+R')
        self.drRect.triggered.connect(self.DefineAction)

        self.toolbar = self.addToolBar('tools')
        self.toolbar.addAction(self.drRect)

    def DefineAction(self):
        drawCircle(self.SchSc)

def main():
    app = QtGui.QApplication(sys.argv)
    ex = SceneWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
4

1 に答える 1

2

QGraphicsItem.itemChange(change, value)シーンの位置の変化を検出するには、再実装する必要があります。PySideドキュメントには直接関連する例があります。

于 2013-02-09T15:14:49.130 に答える