Image qml flickable画布加载内容不';无法调整大小,无法轻弹

Image qml flickable画布加载内容不';无法调整大小,无法轻弹,image,qt,qml,flickable,Image,Qt,Qml,Flickable,我有一个Flickable和一个子Canvas和Image。我正在点击按钮将图像加载到图像的源。这一切都有效。 问题是flickable没有将其尺寸刷新到图像的尺寸,因此整个图像是“flickable”的,我可以在它周围滚动(它比可视窗口大)。但是,如果我调整窗口大小,然后可以在图像周围轻弹,它会刷新 我猜这是因为窗口正在重新绘制,qml正在重新读取img.width和img.height值以重新绘制Flickable (仅供参考如果我在启动应用程序时加载图像,Flickable将按预期工作,只

我有一个
Flickable
和一个子
Canvas
Image
。我正在点击按钮将图像加载到
图像的
。这一切都有效。
问题是flickable没有将其尺寸刷新到图像的尺寸,因此整个图像是“flickable”的,我可以在它周围滚动(它比可视窗口大)。但是,如果我调整窗口大小,然后可以在图像周围轻弹,它会刷新

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

(仅供参考如果我在启动应用程序时加载图像,Flickable将按预期工作,只有当我在点击按钮时加载图像,应用程序运行后,窗口需要重新绘制(或调整大小),以使
Flickable
按预期工作

Flickable {
    id: flickableCanvas
    anchors.fill: parent
    Item {
        id: source
        width: Math.max(parent.width,img.width)
        height: Math.max(parent.height,img.height)
    Image
    {
        id: img
    }
    Canvas {
        id: myCanvas
        }
    }
}

Connections {
    target: QmlBridge
    onLoadImage: {
        img.source = p
        myCanvas.requestPaint()
        flickableCanvas.contentWidth = img.width
        flickableCanvas.contentHeight = img.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
width/height:

Flickable {
    id: flickableCanvas
    anchors.fill: parent
    contentWidth: img.width // no need for future assignment
    contentHeight: img.height
    // ...
}