我们有一个项目,其中有一些组件,其中一个名为Racket.qml
,如下所示:
import QtQuick 2.9
Rectangle {
id: root
width: 15; height: 65
property int oldY: y
property bool yUwards: false
property bool yDwards: false
onYChanged: {
if(y > oldY) yDwards = true
else if (y < oldY) yUwards = true
oldY = y
}
Item {
x: root.x - 50
y: root.y - 50
width: 100
height: 200
MouseArea {
anchors.fill: parent
drag.target: root
focus: true
hoverEnabled: true
pressAndHoldInterval: 0
drag.axis: Drag.YAxis
drag.minimumY: table.y
drag.maximumY: table.height - height - 10
}
}
}
我以main.qml
这种方式使用了该组件:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.1
Window {
id: window
title: qsTr("Test")
color: "gray"
Rectangle {
id: table
width: window.width / 1.15; height: window.height / 1.15
x: window.x + 100; y: 10;
Racket {
id: blackRacket
anchors.left: table.left
anchors.leftMargin: width * 2
y: height
color: "black"
}
Racket {
id: redRacket
anchors.right: table.right
anchors.rightMargin: width * 2
y: height
color: "red"
}
...
我的目的只是扩大球拍区域,但现在当我运行该程序时,我无法拖动球拍!
问题是什么?
答案 0 :(得分:0)
要进行调试,请为Rectangle
添加带有彩色边框的透明MouseArea
。
MouseArea {
anchors.fill: parent
drag.target: root
focus: true
hoverEnabled: true
pressAndHoldInterval: 0
drag.axis: Drag.YAxis
drag.minimumY: table.y
drag.maximumY: table.height - height - 10
Rectangle {
anchors.fill: parent
color: 'transparent'
border.color: 'black'
}
}
您会看到MouseArea
被错误放置。也就是说,因为Item
的位置相对于Rectangle
并且使用x
和y
坐标。将Item
的{{1}}和x
直接设置为y
即可解决问题(第17,18行)。
然而,该项目完全冗余且性能降低。您可以直接更改-50
的大小和位置以减少开销。您也可以通过使用负边距锚定来完成此操作。有点像:
MouseArea