如何用资源中没有的其他图像替换 QML(Qt)文件上的图像
Posted
技术标签:
【中文标题】如何用资源中没有的其他图像替换 QML(Qt)文件上的图像【英文标题】:How to replace an image on QML (Qt) file by an other image do not have in Resource 【发布时间】:2017-04-26 07:20:49 【问题描述】:我有一个 Qml 文件,在其中的按钮上设计了一个图像。
Menu.qml
(...)
ToolButton
Image
(...)
Image
id: img1
source: "qrc:/Images/img_1.png"
现在我想,如果我在文件夹 C:/Images/ 中有一张图片,例如 C:/Pic/img_2.png,加载成功后 Menu.qml ,它会自动将 img_1.png(在资源中)替换为 img_2.png(不在资源中)。
有人可以帮帮我吗? (对不起我的英语不好)
【问题讨论】:
【参考方案1】:Image
允许用户在运行时使用 javascript 代码更改图像源。因此,无论何时您想更改图像,都可以将新的源 URL 分配给 img1.source
。
image.source = 'file:/c:/Pic/img_2.png';
请注意,对于本地文件,您应该使用file:
协议方案。
【讨论】:
你测试了吗?我可能是错的,但我很确定它需要三个正斜杠:file:///C:/Pic/img_2.png
非常感谢file:/
我尝试了一个正斜杠,它仍然有效..【参考方案2】:
如果我理解您的问题,您可以在加载按钮后通过附加到信号 Component.onCompleted
来更改属性
(...)
ToolButton
Image
(...)
Image
id: img1
source: "qrc:/Images/img_1.png"
Component.onCompleted:
source = "file://C:/Pic/img_2.png"
【讨论】:
感谢您的帮助。我的 qml 文件有许多图像,每个图像可以替换(如果文件夹 C 中存在id
的图片),或不(如果不存在)。我的老师想批准一次。所以我选择了这种方式:编写函数浏览该文件夹并列出所有适当的文件名,并替换var pngName = arrayIcon[i]; var controlName = pngName.slice(0,-4); eval(controlName).source = pathPng + pngName;
然后加载成功后调用该函数。目前,它仍然运行良好。【参考方案3】:
Managing Resource Files with the Qt Resource System
...QML 中由相对路径指定的所有文件都将从资源系统加载。资源系统的使用对 QML 层完全透明;这意味着所有 QML 代码都应该使用相对路径引用资源文件,并且不应使用 qrc 方案。此方案只能在 C++ 代码中用于引用资源文件。
因此,在资源文件之外加载图像所需要做的就是使用其绝对路径。
【讨论】:
以上是关于如何用资源中没有的其他图像替换 QML(Qt)文件上的图像的主要内容,如果未能解决你的问题,请参考以下文章