【问题标题】:Send image source path from C++ to QML in a cross platform way以跨平台方式将图像源路径从 C++ 发送到 QML
【发布时间】:2020-01-28 14:32:14
【问题描述】:

工作代码

此代码正确显示图像:

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

错误代码

此代码不工作,我的意思是图像未显示:

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

路径的QML日志

在 QML 上记录 path:

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

C++ 路径日志

在 C++ 上记录 path:

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

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

更新

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

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

结果:

qml:图片来源: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:图片来源:file:///C:/Users/m3/AppData/Local/Temp/sli/3d.png qml:图片来源:file:///C:/Users/m3/AppData/Local/Temp/sli/3d.png

【问题讨论】:

  • 你试过正斜杠/吗?
  • @Taron 是的,我试过了。
  • 也许你在 Image.source 设置后设置了cpplib.path?尝试打印来自onSourceChanged 事件的source 值。无论如何,只是一个建议 - 从 C++ 设置图像的正确方法是 QQuickImageProvider

标签: c++ qt qml


【解决方案1】:

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

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 评论引导我朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 2011-05-29
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2021-04-03
    • 2014-07-11
    相关资源
    最近更新 更多