2017-01-11 20 views
0

起動時にqrcリソースに保存された画像を読み込むことはできますが、非常に同じ画像(デモ目的のみ)を読み込もうとすると「QML画像:開くことができません:qrc: ../.... 'エラー。
イメージを繰り返しクリックすると、起動時に読み込まれた同じPNGファイルに同じエラーが返されます(エラーは発生しません)。プログラムが起動して実行されると、パスが変更されるようになります。
プログラムが実行されると、 'gray_button1.png'と 'gray_button2.png'のどちらも不明な理由で開くことはできません。
このスクリプト自体を実行しているQMLファイルは、QMLに格納されています。 qrcファイル。ここでQML画像読み込み問題

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 
     } 
    } 
} 

が(例えばQRCのXMLを含む)あなたの完全なプロジェクトを見ることができず、ファイル構造

Application 
-->Root 
---->Images 
     gray_button1.png 
     gray_button2.png 
-->QML 
    qml.qrc 
    button.qml 
    ...{*.qml} 
+0

私が知っているように、qrcのパスは ':/ prefix/file'です。あなたの場合、「..」は何を意味しますか?フォルダ構造を指定してください。 – folibis

+0

なぜフォルダ構造が重要なのでしょうか?起動時にファイルが最初のパスで見つかる可能性がある場合、実行時にそれを見つけることができないのはなぜですか? – Gio

答えて

0

あり、それは具体的な何かを提案できるようにするには少し難しいです - Iこのような問題を思い出すことはできませんが、試してみます。

残念ながら、Imageは、正確に何が間違っていたかを報告する際に少し恥ずかしがりです。私はfix pending for thisを持っていますが、Qt 5.9までは利用できません。(独自のQtビルドをお持ちなら、お気軽にお試しください。

これを行うには、(C++で)を使用してImageに渡すパスを読み込み、あなたが読んでいるものが意味があることを確認することをお勧めします。あなたは何の問題にその方法を見つけるなければ、私はあなたが持っている既存のコードを簡素化することをお勧めしたい、

QImageReader reader("qrc:/Root/Images/gray_button2.png"); 
QImage img = reader.read(); 
if (img.isNull()) { 
    qWarning() << "Something is wrong:" << reader.errorString(); 
} 

:あなたは、より簡単にそうように、ファイルのerrorString()を印刷してそこに何かをエラーメッセージにアクセスすることができるはずです例えば、qrc:/Root/Images/Whatever.pngのような相対パスではなく絶対パスを使用してqrcを式から完全に取り除き、それを続けて1つずつ切り取り、意味のあるものに達するまで(そして、理想的には犯人)。

ここで示されているQMLの例で言及した問題を再現することはできません。

関連する問題