qml可轻弹的画布加载内容不会调整大小,也无法轻弹

时间:2019-01-13 20:10:01

标签: image qt qml flickable

我有一个Flickable,有一个孩子CanvasImage。单击按钮后,我正在将图像加载到source的{​​{1}}中。一切正常。 问题是可滑动对象不会将其尺寸刷新为图像的尺寸,因此整个图像都是“可滑动的”,并且我可以在其周围滚动(它比可见窗口大)。但是,如果我调整窗口大小,它确实会刷新,然后可以在图像周围滑动。

我猜这是因为正在重绘窗口,而qml正在重新读取Imageimg.width值以重绘img.height

(仅供参考,如果我在启动应用程序时加载图像,Flickable会按预期工作,仅当我单击按钮加载图像时,应用程序运行后,窗口需要重新绘制(或调整大小)才能获取Flickable可以正常工作

Flickable

1 个答案:

答案 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
    // ...
}