Отправьте исходный путь изображения из C ++ в QML кросс-платформенным способом - PullRequest
0 голосов
/ 28 января 2020

Рабочий код

Этот код показывает изображение правильно:

Image {
    source: Qt.resolvedUrl("file:" + "C:\\Users\\m3\\AppData\\Local\\Temp\\sli\\3d.png")
}

Неверный код

Этот код не работает, я имею в виду изображение не отображается:

Image {
    source: Qt.resolvedUrl("file:" + cpplib.path + "\\" + "3d.png")
}

Журнал QML пути

Журнал path в QML:

console.log(cpplib.path)
C:\Users\m3\AppData\Local\Temp\sli

Журнал C ++ пути

Ведение журнала path на C ++:

QString path = // ...
qDebug() << path;
"C:\\Users\\m3\\AppData\\Local\\Temp\\sli"

Как я могу отправить исходный путь изображения из C ++ в QML в кроссплатформенном способе?

ОБНОВЛЕНИЕ

Регистрация источника изображения с помощью:

Image {
    // ...
    onSourceChanged: {
        console.log("image source:", source)
    }
}

приводит к:

qml: image source: file:///C:/Users/m3/AppData/Local/Temp/sli/3d.png

ОБНОВЛЕНИЕ

Я установил источник изображения последовательно:

imageID.source = Qt.resolvedUrl("file:" + cpplib.path + "\\3d.png")
imageID.source = Qt.resolvedUrl("file:" + "C:\\Users\\m3\\AppData\\Local\\Temp\\sli\\3d.png")

К моему удивлению, журналы внутри onSourceChanged показывают, что два фактически одинаковы:

    onSourceChanged: {
        console.log("image source:", source)
    }
qml: image source: file:///C:/Users/m3/AppData/Local/Temp/sli/3d.png
qml: image source: file:///C:/Users/m3/AppData/Local/Temp/sli/3d.png

1 Ответ

0 голосов
/ 28 января 2020

Оба эти утверждения работают просто отлично:

imageID.source = Qt.resolvedUrl("file:" + cpplib.path + "\\3d.png")
imageID.source = Qt.resolvedUrl("file:" + "C:\\Users\\m3\\AppData\\Local\\Temp\\sli\\3d.png")

Причиной проблемы было , а не изображение source или формат URL. Причина была в том, что я иногда пытался показать изображение еще до того, как оно появилось! Комментарий @folibis направил меня в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...