2017-01-11 3 views
0

Ich kann ein Bild in Qrc-Ressource beim Start geladen werden, gerade gut, aber wenn ich versuche, das gleiche Bild (nur für Demo-Zwecke) zu laden, bekomme ich ein 'QML-Bild: Kann nicht öffnen: qrc: ../....' Error.
Durch wiederholtes Klicken auf das Bild wird dieselbe PNG-Datei, die beim Start geladen wurde (ohne Fehler), mit dem gleichen Fehler versehen. Es ist, als ob sich die Pfade ändern, sobald das Programm läuft.
Im Wesentlichen können weder 'gray_button1.png' noch 'gray_button2.png' aus unbekannten Gründen geöffnet werden, sobald das Programm ausgeführt wird ...
Eine andere Tatsache: Die QML-Datei, die dieses Skript selbst ausführt, wird in der QML gespeichert. qrc-Datei.QML Bild laden Problem

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

Hier ist die Strukturdatei

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

Wie ich weiß, qrc Pfad ist ':/Präfix/Datei. Was bedeutet '..' in deinem Fall? Bitte geben Sie die Ordnerstruktur an. – folibis

+0

Warum sollte die Ordnerstruktur wichtig sein? Wenn die Datei beim ersten Start gefunden wird, warum konnte sie zur Laufzeit nicht gefunden werden? – Gio

Antwort

0

Ohne die Möglichkeit, Ihr vollständiges Projekt zu sehen (einschließlich der qrc XML, zum Beispiel), ist es ein bisschen schwierig, in der Lage sein, etwas Konkretes vorzuschlagen - I kann mich an ein Problem wie dieses nicht erinnern - aber ich werde es versuchen.

Leider ist Image ein wenig schüchtern, wenn es darum geht zu berichten, was genau falsch gelaufen ist. Ich habe eine fix pending for this, aber es wird wahrscheinlich nicht verfügbar bis Qt 5.9 (obwohl, wenn Sie Ihre eigenen Qt Build haben, fühlen Sie sich frei, es auszuprobieren, könnte es Ihnen helfen!)

Wenn Sie nicht in der Lage sind tue das, ich würde vorschlagen, zu versuchen, die Pfade zu lesen, die Sie an Image unter Verwendung QImageReader (in C++) weitergeben, und sicherzustellen, dass das, was Sie lesen, sinnvoll ist. Sie sollten es leichter eine Fehlermeldung zugreifen können durch Drucken des errorString() der Datei, so etwas wie so:

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

Wenn Sie kein Problem, dass Art und Weise zu finden, dann würde ich vorschlagen, den vorhandenen Code vereinfachen Sie haben zum Beispiel mit absoluten statt relativen Pfaden, wie qrc:/Root/Images/Whatever.png, das qrc ganz aus der Gleichung herauszunehmen und diesen Weg fortzusetzen, ein Stück nach dem anderen daraus zu schneiden, bis du etwas erreichst, das Sinn macht (und funktioniert, zeigt idealerweise das Täter).

Für was es wert ist, kann ich das Problem nicht wiederholen, das Sie mit dem Beispiel-QML, das Sie hier zeigen, erwähnen.