0

私は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) 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)

4

1 に答える 1

0

ああなるほど。出力を確認した後、何が問題なのかがわかります。マウスを動かすと、マウスは通常 と を変更しxますy。したがって、move()will は 2 回実行されます。

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)
}
于 2015-08-23T15:23:11.300 に答える