QML图像加载问题

时间:2017-01-11 17:42:32

标签: image resources qml loading

我可以在启动时加载存储在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}

1 个答案:

答案 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中提到的问题。