Seite 1 von 1

Problem beim laden von Bildern -> File not Found

Verfasst: 21. Juli 2010 09:10
von ossi
Hi Leute,

gibt es bei Qt irgendwelche Bedingungen was den Namen von Bildern angeht?

Ich hab mehrfach das Problem gehabt, das ein Bild nicht gefunden wurde, obwohl es vorhanden ist, der Richtige Pfad genutzt wurde und ich das Bild auch so öffnen konnte. Habe ich das Bild dann aber kopiert und ihm einen anderen Namen gegeben, wurde es gefunden.

Ich verwende folgenden Code beim einlesen der Bilder:

Code: Alles auswählen

       for (int i = 0; i < 4; i += 1)
        {
              //Bilderpfad zusammenbasteln
                if (Image_Name[i])
                {
                        if (BILDERPFAD)
                                sprintf (Load_Name, "%s/%s", BILDERPFAD, Image_Name[i]);
                        else    sprintf (Load_Name, "./Bilder/%s", Image_Name[i]);

                        Ergebnis = stat (Load_Name, &FileBuffer);
              //Bild laden bzw. Fehlermeldung ausgeben
                        if (Ergebnis == 0)
                        {
                                printf ("Load Icon [%s]\n", Load_Name);
                                Icon[i].addFile(Load_Name, QSize(), QIcon::Normal, QIcon::Off);
                        }
                        else
                        {
                                printf ("Cannot Load Icon [%s], Ergebnis = %d\n", Load_Name, Ergebnis);
                                perror ("Fehler");
                                Image_Name[i] = NULL;
                        }
                }
        }
Ist einfach nur IRGENDWAS an der Bilddatei defekt, oder liegt es an Qt?

Dazu ist noch zu sagen das mein Programm in 99% der Fällen funktioniert!

Verfasst: 21. Juli 2010 09:26
von kater
Was macht denn stat()?
Ist Load_Name vom Typ char* und auch lang genug?
Trenne dich von char*, printf etc. Du arbeitest mit Qt. Nutze QString, QBytearr, qDebug() und alle das.

Verfasst: 21. Juli 2010 09:31
von franzf
Der Code sagt einem gar nix. Ist das ein relativer oder absoluter Pfad? Was macht stat? Hast du die Doku zu QIcon::addFile gelesen?
Bei letzterem bin ich mir sicher: nein :P
Adds an image from the file with the given fileName to the icon, as a specialization for size, mode and state.
HINT: QIcon hat auch einen operator=.

Ich tippe aber darauf, dass dein Zugriffspfad relativ zum executable angegeben wird, das Ausführungsverzeichnis mit diesem aber nicht identisch ist :P

Und warum eigentlich diese ganzen sprintf?!? Verwende für die Pfade gleich QString mit operator+/operator+= oder wenn dir "normale" Funktionen lieber sind, QString::append().

Verfasst: 21. Juli 2010 09:38
von ossi
Nein, ich verwende kein Qt, ich verwende Klassen von Qt... das Hauptprogramm ist C++. Und ob jetzt QString oder sprintf tut ja nix zur Sache, der Pfad wird jedenfalls korrekt zusammengesetzt.

Der Pfad ist absolut zum Executable. Der Loadname ist lang genug, da er mit längeren Namen auch keine Probleme hat. (wird mit 128 Zeichen initialisiert)

Der Witz an der ganzen Sache ist ja, da werden 30 oder 50 Icons auf genau die Weise geladen... und eines findet er nicht.

Verfasst: 21. Juli 2010 09:48
von franzf
ossi hat geschrieben:Nein, ich verwende kein Qt, ich verwende Klassen von Qt... das Hauptprogramm ist C++.
Dann verwende std::string. Solch händisches char*-Stückwerk ist immer fehleranfällig, std::string verhindert, dass du solche Fehler machst. Z.B. zu kurze Zielstrings, fehlendes "\0" als String-Terminierer, usw.

Aber dein Argument versteh ich nicht: Du verwendest an der Stelle QIcons in einem Vector/Array (QVector, std::vector, rohes Array, boost::array?). Du bindest dich also schon komplett an Qt, dann verwende doch bitte an der Stelle auch QString!
Der Pfad ist absolut zum Executable. Der Loadname ist lang genug, da er mit längeren Namen auch keine Probleme hat. (wird mit 128 Zeichen initialisiert)
Absolut zum executable :D
Absolut == "/home/my_user/apps/BildLader/Bilder/"
Relativ == "../Bilder"
Der Witz an der ganzen Sache ist ja, da werden 30 oder 50 Icons auf genau die Weise geladen... und eines findet er nicht.
Das war aus deinem ersten Post nicht so klar heraus zu lesen.
Dann liegt es an was anderem, k.A.
Hast du dir den kompletten Pfad ausgeben lassen und auf Korrektheit überprüft? Sind Sonderzeichen im Namen enthalten?

Verfasst: 21. Juli 2010 09:58
von ossi
Man... meint ich ja... du hast mich verstanden! :lol:


Pfad wird komplett ausgegeben im Fehlerfall und ist Korrekt. Sichtbare Sonderzeichen sind nicht vorhanden (gibt's eigentlich unsichtbare Sonderzeichen? :wink: ). Selbst die Dateirechte sind mit den anderen 50 Übereinstimmend... ist schon ziehmlich seltsam, da alle Bilder auf die gleiche Weise in Gimp entstanden sind. Wäre die Datei defekt, könnte man das ja verstehen, aber so ist es schon seltsam.

Verfasst: 21. Juli 2010 10:10
von franzf
Dann hilft nur noch eins:
Projekt samt Bildern in ein .zip und als Anhang hier im Forum an deinen Post hängen (Forum-Funktion "Attachement", bitte kein rapidshare &co...).
Nimm alle Binaries (libs/.exe) raus, hier haben eigentlich alle Qt installiert und können kompilieren. Und ich hab ne langsame Internetleitung :P
Am besten gleich als Minimalbeispiel, also an Code alles weg was irrelevant ist, so dass dein Problem extrahiert wird.

Verfasst: 21. Juli 2010 10:16
von ossi
Des kann ich leider nicht machen, unterliegt einem Copyright... Studienarbeit und so. :D

Dennoch danke für die Antworten. Jetzt bin ich halbwegs sicher das es net am Programm liegt! :wink:

Verfasst: 21. Juli 2010 10:47
von kater
Solltest du den eigentlichen Fehler noch finden, sag bescheid :)

Verfasst: 21. Juli 2010 12:41
von Christian81
Sind da evtl. nicht.-ASCII - Zeichen im Dateinamen? Wenn ja - siehe QString-Doku!