如何拖动一个qquickwidget?

Posted

技术标签:

【中文标题】如何拖动一个qquickwidget?【英文标题】:How to drag a qquickwidget? 【发布时间】:2015-08-23 15:11:09 【问题描述】:

我在主窗口中有一个QQuickWidget。这似乎有效,但拖动时会剧烈晃动。

//main.qml
Rectangle
      id: root
      property point dragStart
      signal moved(point offset)

      MouseArea
          id: dragArea
          anchors.fill: parent

          onPressed: root.dragStart = Qt.point(dragArea.mouseX,dragArea.mouseY)
          onMouseXChanged: move()
          onMouseYChanged: move()
          function move()
                var offset = Qt.point(dragArea.mouseX-root.dragStart.x, dragArea.mouseY-root.dragStart.y)
                root.moved(offset)
                console.log(offset)
          
      

//MainWindow.cpp
void MainWindow::moveQml(QPointF offset)
    ui->quickWidget->move(ui->quickWidget->pos()+offset.toPoint());

这是我只拖到左下角时的调试输出,点不应该有正x:

qml: QPointF(6, 2) qml: QPointF(6, 2) qml: QPointF(-6, -1) qml: QPointF(-6, -1) qml: QPointF(5, 1) qml: QPointF(5, 1) qml: QPointF(-5, 0) qml: QPointF(-5, 0) qml: QPointF(4, 0) qml: QPointF(4, 0) qml: QPointF(-5, 1) qml: QPointF(-5, 1)

【问题讨论】:

【参考方案1】:

哦,我明白了。检查输出后,我知道出了什么问题。当移动鼠标时,鼠标通常会改变它的xy。所以move() 将被执行两次。

onMouseXChanged: 
    var offset = Qt.point(dragArea.mouseX - root.dragStart.x, 0)
    root.moved(offset)


onMouseYChanged: 
    var offset = Qt.point(0, dragArea.mouseY - root.dragStart.y)
    root.moved(offset)

【讨论】:

以上是关于如何拖动一个qquickwidget?的主要内容,如果未能解决你的问题,请参考以下文章

如何在拖动时隐藏可拖动div的阴影

求助,WPF如何实现控件的拖动与复制

在被拖动后如何将可拖动对象保持在其位置?

如何使用 jquery ui 使拖动和克隆的元素再次可拖动?

如何阻止按钮推翻拖动手势

有关安卓launcher,如何实现拖动一个图标进入另一个图标,然后合成一个文件夹