Управление ресурсами Qt по URL во время выполнения

Я использую ресурсы Qt в своем приложении QML. Я хочу изменить ресурс, используемый некоторыми элементами во время выполнения.

В следующем примере 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 ответ

Вы пробовали сигнал уведомления?

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 подразумевает, что он находится в файле ресурсов qt, включенном в ваш файл.pro. Так что, если он работает с file:// тогда вам может понадобиться добавить второй в ваш файл qresource.

Надеюсь, это поможет.

Другие вопросы по тегам