如何拖动一个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】:哦,我明白了。检查输出后,我知道出了什么问题。当移动鼠标时,鼠标通常会改变它的x
和y
。所以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?的主要内容,如果未能解决你的问题,请参考以下文章