Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt移动时在场景位置拖动项目_Qt_Events_Qt4_Pyqt_Pyside - Fatal编程技术网

Qt移动时在场景位置拖动项目

Qt移动时在场景位置拖动项目,qt,events,qt4,pyqt,pyside,Qt,Events,Qt4,Pyqt,Pyside,在场景中拖动qgraphicsitem有几种方法。但我最感兴趣的是附加标志“itemIsMovable”,因为它在Qt库中应该更“原生” 我的问题是,;当项目拖动时,应该以什么方式打印其位置?记住,我们已经标记了,物品正在移动,位置正在返回某处 下面就是一个例子。问题是如何以交互方式更新矩形和圆之间的连接线(使用工具栏图标添加带连接线的圆) 您需要重新实现QGraphicsItem.itemChange(change,value)来检测场景位置的变化。PySide有一个直接相关的例子。那么,拖动

在场景中拖动qgraphicsitem有几种方法。但我最感兴趣的是附加标志“itemIsMovable”,因为它在Qt库中应该更“原生”

我的问题是,;当项目拖动时,应该以什么方式打印其位置?记住,我们已经标记了,物品正在移动,位置正在返回某处

下面就是一个例子。问题是如何以交互方式更新矩形和圆之间的连接线(使用工具栏图标添加带连接线的圆)


您需要重新实现
QGraphicsItem.itemChange(change,value)
来检测场景位置的变化。PySide有一个直接相关的例子。

那么,拖动项的较便宜的方法是什么:这个方法带有标记附加的ItemsSendSSCenePositionChanges,或者通过item.grabMouse在场景事件def中交互附加(记住,应该有很多要求很高的项和组)?来自
QGraphicsItem::grabMouse()
docs:“几乎从来没有必要在Qt中显式抓取鼠标”。使用我建议的方法,在场景位置发生变化时得到通知。@Alex不是那种网站。最接近的等效方法是在聊天室中创建一个新的聊天室。
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()