qt - QML从抽屉拖动到另一个项目,当抽屉关闭时如何保持连续拖动
问题描述
我的目标是从 中拖放一个副本item
并将drawer
其放到另一个item
. 当我按住 时item
,我会创建一个新Rectangle
的并将其重新设置为新的parent
并将其设置为当drag.target
我越过. 我的问题是我失去了对拖拽的控制。即使被调用,我怎么能继续拖动。这是一个工作示例:close()
drawer
drawer
item
item
drawer.close()
import QtQuick 2.4
import QtQuick.Controls 2.1
ApplicationWindow {
width: 600
height: 600
visible: true
Item{
id: root
Drawer{
id:drawer
width: 0.5 * parent.width
height: parent.height
edge: Qt.RightEdge
Rectangle {
id: item
border.width: 2
x: 100
y: 100
width: 100
height: 100
MouseArea {
id: mouseArea
anchors.fill: parent
onPressAndHold: {
var newItem = createShadow(item)
newItem.parent = root
drag.target = newItem
}
onMouseXChanged: {
//hard coding the cursor crossing the drawer boundary
var point = mapToItem(root, mouseX, mouseY)
if (point.x < 300)
drawer.close()
}
onReleased: {
drag.target.Drag.drop()
}
}
}
}
DropArea {
anchors.fill: parent
onDropped: {
//do something
}
}
}
function createShadow(itm) {
//assuming we are fetching geometry from itm
var component = Qt.createQmlObject('import QtQuick 2.4; Rectangle{x:400;y:100;width:100;height:100;opacity:0.2;color:"black"}',root, "asdf");
return component
}
}
解决方案
您还应该MouseArea
在拖动期间重新设置,以便继续接收onMouseXChanged
事件:
onPressAndHold: {
var newItem = createShadow(item)
newItem.parent = root
drag.target = newItem
parent = root
}
// ...
onReleased: {
drag.target.Drag.drop()
parent = item
}
推荐阅读
- node.js - 安装和使用全局 npm 包的首选方式?
- php - Wordpress 插件开发,找到具体页面
- c# - 在 nuget 包中添加第三方 COM 引用
- r - R:在 Shiny App 中引入自动化
- selenium-grid - Safari 11 的远程 Safari 驱动程序无法单击元素
- mongodb - Grails GORM有很多与MongoDB不一致的关联,当尝试获取子记录时,有时会获取记录,有时不获取
- mysql - 带有 JSP 和 Servlet 的 CRUD 应用程序的 doPost() 或 doGet() 方法?
- webpack - react-hot-loader 和 webpack-dev-server 不会重新加载更改
- python - python下的模块帮助()不起作用
- python - 无法分配“'HR'”:“Employee.department”必须是“Department”实例