我有一个Flickable
,有一个孩子Canvas
和Image
。单击按钮后,我正在将图像加载到source
的{{1}}中。一切正常。
问题是可滑动对象不会将其尺寸刷新为图像的尺寸,因此整个图像都是“可滑动的”,并且我可以在其周围滚动(它比可见窗口大)。但是,如果我调整窗口大小,它确实会刷新,然后可以在图像周围滑动。
我猜这是因为正在重绘窗口,而qml正在重新读取Image
和img.width
值以重绘img.height
。
(仅供参考,如果我在启动应用程序时加载图像,Flickable会按预期工作,仅当我单击按钮加载图像时,应用程序运行后,窗口需要重新绘制(或调整大小)才能获取Flickable
可以正常工作
Flickable
答案 0 :(得分:1)
您似乎正在尝试加载图像的width
/ height
。
您应该将Flickable contentWidth
/ contentHeight
分配移动到Image
组件下:
Image {
id: im
onStatusChanged: {
if (status === Image.Ready) {
flickableCanvas.contentWidth = img.width
flickableCanvas.contentHeight = img.height
}
}
}
// ...
Connections {
target: QmlBridge
onLoadImage: {
img.source = p
myCanvas.requestPaint()
// flickableCanvas.contentWidth = img.width
// flickableCanvas.contentHeight = img.height
}
}
但是我认为您甚至不必手动设置这些属性。通过将它们绑定到您的img
宽度/高度,您可以简化很多事情:
Flickable {
id: flickableCanvas
anchors.fill: parent
contentWidth: img.width // no need for future assignment
contentHeight: img.height
// ...
}