我可以在启动时加载存储在qrc资源中的图像,但是当我尝试加载相同的图像时(仅用于演示目的),我得到一个'QML图像:无法打开:qrc:../。 ......'错误。
重复单击图像甚至会给启动时加载的同一PNG文件带来相同的错误(没有错误)。一旦程序启动并运行,就好像路径会发生变化。
基本上,一旦程序运行,“gray_button1.png”和“gray_button2.png”都不会被打开,原因不明...
另一个事实是:运行此脚本本身的QML文件存储/位于QML.qrc文件中。
import QtQuick 2.7
Rectangle {
id: baseBtn
color: "transparent"
property string activeSource:"qrc:../Root/Images/gray_button1.png";
property string inactiveSource:"qrc:../Root/Images/gray_button2.png";
property string previousText:""
property bool active:false
onActiveChanged:{
if (active)
btnImage.source = activeSource;
else
btnImage.source = inactiveSource;
}
MouseArea{
id: mouseArea1
anchors.fill:parent
onClicked: {
active = !active;
}
Image {
id: btnImage
width:parent.width
height: parent.height
anchors.horizontalCenter: parent.horizontalCenter
source:"qrc:../Root/Images/gray_button2.png"; //opens and loads fine at start up -> appears normal
z:0
}
}
}
这是文件结构
Application
-->Root
---->Images
gray_button1.png
gray_button2.png
-->QML
qml.qrc
button.qml
...{*.qml}
答案 0 :(得分:1)
如果没有能够看到你的完整项目(例如包括qrc XML),那么能够建议具体的东西有点困难 - 我不记得像这样的问题 - 但我会尝试。
不幸的是,Image
在报告确实出错的时候有点害羞。我有一个fix pending for this,但是在Qt 5.9之前可能无法使用(虽然如果你有自己的Qt版本,请随意尝试,它可能对你有用!)
如果你无法做到这一点,我建议你尝试使用QImageReader
(在C ++中)读取你传递给Image
的路径,并确保你是什么阅读是有道理的。您应该可以通过打印文件的errorString()
来更轻松地访问错误消息,如下所示:
QImageReader reader("qrc:/Root/Images/gray_button2.png");
QImage img = reader.read();
if (img.isNull()) {
qWarning() << "Something is wrong:" << reader.errorString();
}
如果您没有发现任何问题,那么我建议您简化现有的代码,例如,使用绝对路径而不是相对路径,例如qrc:/Root/Images/Whatever.png
,将qrc完全取出,并且继续这样做,从此切割出一件又一件,直到你达到一些有意义的东西(并且工作,理想地揭示了罪魁祸首)。
对于它的价值,我无法重现您在此处展示的示例QML中提到的问题。