在运行时通过URL操作Qt资源

时间:2017-06-26 17:02:38

标签: qt qml

我在QML应用程序中使用Qt资源。我想在运行时更改某些项目使用的资源。

在以下示例中,Image对象使用资源。它正确显示。如果我单击它,处理程序会设置看似相同的值,但它不起作用:Image对象无法加载资源。

import QtQuick 2.7
import QtQuick.Controls 2.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("qrc file not updating")

    Image
    {
        id: gfx
        source: "qrc:/../../../../Qt/5.9/Src/qtquickcontrols2/examples/quickcontrols2/chattutorial/shared/Ernest Hemingway@2x.png"
        width: 200
        height: 200
    }
    MouseArea
    {
        anchors.fill: gfx
        onPressed: gfx.source = "qrc:/../../../../Qt/5.9/Src/qtquickcontrols2/examples/quickcontrols2/chattutorial/shared/Ernest Hemingway@2x.png"
    }
}

qrc更改为file以使用文件而非资源有效。

是否可以在运行时更改已使用的资源(实现另一个QML对象 - 此处为Image - 有效,但我需要使用相同的对象)。

1 个答案:

答案 0 :(得分:0)

您是否尝试过通知信号?

onPressed: {
    gfx.source = "qrc://my/new/image.png";
    gfx.sourceChanged();
}

https://forum.qt.io/topic/6935/how-to-reload-an-image-in-qml/18

qrc也暗示它存在于.pro文件中包含的qt资源文件中。因此,如果它适用于file://,那么您可能需要将第二个添加到qresource文件中。

希望有所帮助。