以跨平台方式将图像源路径从C ++发送到QML

时间:2020-01-28 14:32:14

标签: c++ qt qml

工作代码

此代码正确显示图像:

Configuration.Auditing.Selectors.Add(
              new NamedTypeSelector(
                  "BackgroundJobs",
                  type => typeof(IBackgroundJob<TestClass>).IsAssignableFrom(type)
              )
          ); 

错误代码

此代码不起作用有效,我的意思是未显示图片:

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

路径的QML日志

在QML上登录Image { source: Qt.resolvedUrl("file:" + cpplib.path + "\\" + "3d.png") }

path
C:\Users\m3\AppData\Local\Temp\sli

路径的C ++日志

在C ++上登录console.log(cpplib.path)

path
"C:\\Users\\m3\\AppData\\Local\\Temp\\sli"

如何以跨平台的方式将图像源路径从C ++发送到QML?

更新

通过以下方式记录图像源:

QString path = // ...
qDebug() << path;

导致:

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

更新

我连续设置图像源:

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

令我惊讶的是,imageID.source = Qt.resolvedUrl("file:" + cpplib.path + "\\3d.png") imageID.source = Qt.resolvedUrl("file:" + "C:\\Users\\m3\\AppData\\Local\\Temp\\sli\\3d.png") 中的日志显示两者实际上是相同的:

onSourceChanged
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 :(得分:0)

这两个语句都可以正常工作:

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评论引导了我正确的方向。

相关问题