【发布时间】:2017-01-19 22:55:43
【问题描述】:
我目前正在 QML / QtQuick 中设置一个 QUI 应用程序。
我的 GUI 由一个包含 png 图像的页面组成。此图显示了用户应按下以触发某些应用程序行为(即上/下/左/右)的箭头。
图像具有 fillMode: Image.PreserveAspectFit 属性,这允许图像在调整窗口大小时很好地缩放。
现在为了捕捉事件,我在箭头上方设置了一些 MouseAreas。尽管它们没有与窗口调整大小一起正确调整大小,但它们的行为很好。这就是我尝试过的任何布局摆弄,MouseAreas 不会停留在箭头之上(这显然对用户无用)。
在下图中,您可以看到设计的布局,png 图像显示车辆和箭头(它们是由于按下时移动车辆),鼠标区域正确地覆盖了箭头。
在图像上,我们可以看到调整窗口大小后的布局。 png 图像的大小已正确调整(考虑到保留的方面和所有内容),但 MouseAreas 未正确移动和调整大小,因此它们不再覆盖箭头。
我已尝试使用锚选项设置我的布局。然后我尝试手动计算 MouseAreas 的 x、y、width 高度(参见下面的示例代码),但没有任何效果。
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
visible: true
width: 600
height: 600
title: qsTr("Hello World")
Rectangle {
id: rectangle1
anchors.fill: parent
color: "#222222"
Image {
id: backBack
anchors.fill: parent
fillMode: Image.PreserveAspectFit
source: "ManualMove_allButBackgroundAndCore.png"
smooth: true
MouseArea {
id: z_up
x: 483 / backBack.implicitWidth * backBack.width
y: 222 / backBack.implicitHeight * backBack.height
width: 100
height: 120
hoverEnabled: true
onPressed: {
console.log("z_up pressed width.")
}
onReleased: {
console.log("z_up released.")
}
}
Rectangle {
id: rectangle2
x: 483 / backBack.implicitWidth * backBack.width
y: 222 / backBack.implicitHeight * backBack.height
width: 100
height: 120
color: "#ffffff"
}
}
}
}
矩形允许在运行应用程序时可视化 MouseArea 的行为。
---------更新---------
我添加了一个example file 来表明我的意思。我希望白色矩形与蓝色箭头一起移动和调整大小(因此白色矩形始终位于左侧蓝色箭头上)。
知道如何正确调整布局大小吗?
亲切的问候,
安托万。
【问题讨论】:
-
你能提供一个运行的最小例子吗?例如,将
backBack项目放入ApplicationWindow并确保它重现您的问题?这样我们就可以运行您的代码并使用它。目前缺少太多。 -
嗨 Mitch,我刚刚添加了示例文件的链接...
标签: layout qml qtquick2 qtquickcontrols