Seite 1 von 1

QIcon und der entsprechende pfad

Verfasst: 19. Juli 2008 19:50
von haldol
hallo,

ich habe hier ein problem mit der icon darstellung welches sehr wahrscheinlich am eingesetzten pfad liegt. ich nutze eclipse und solange ich mein programm daraus öffne, funktioniert die darstellung.
der image ordner mit den icons liegt im selben verzeichnis wie die quelldateien. dafür funktionieren bei der nutzung von eclipse folgende pfade:

Code: Alles auswählen

QIcon("./images/door_open.png")
QIcon("images/door_open.png")
ausserhalb der eclipse versagen beide. eine weitere möglichkeit, soll diese sein:

Code: Alles auswählen

QIcon(":/images/door_open.png")
leider wird in dem entsprechenden buch nicht beschrieben, woran sich dieser pfad orientiert - er funktionier hier überhaupt nicht.
das system auf dem ich arbeite ist ein linux, nach möglichkeit sollte das programm aber später auch auf windows laufen.
wie mache ich das also?

haldol

Verfasst: 19. Juli 2008 20:50
von upsala
Zum dritten Pfad gibts die Informationen in der Doku, nämlich beim Qt Resource System

Und die ersten beiden Pfade sind relativ zu dem Pfad zu sehen, von dem aus dein Binary gestartet wird.

Verfasst: 19. Juli 2008 21:41
von haldol
vielen dank, da findet sich alles, was ich zu dem thema wissen muss.

Verfasst: 30. Juli 2009 12:52
von Exasperation
Hmm kann ich in ein QIcon auch ein Icon einfügen, dass ich mir aus der VS ressourcen datei *.rc hol? Bzw wie bewerkstellige ich das? Oder bin ich gezwungen das Qt Ressource System zu benutzen wenn ich in meiner exe Icons haben will ohne die separat mitschleppen zu müssen?

Verfasst: 30. Juli 2009 13:16
von Christian81
Wenn Du die Icons mittels ":/..." laden willst musst Du auch das Qt-Resourcensystem benutzen - ist nunmal eine Qt-Erweiterung. Wenn Du :/ nicht benutzen willst ist es Dir überlassen wo und wie Du Deine Icons lädst.

Verfasst: 30. Juli 2009 14:33
von Exasperation
Okay dann mach ich das so.. ist ja auch nicht allzu schwer...

Mein einziges Problem ist, dass ich nicht weiß wie ich ne .pro Datei erstell... Kann ich mir die generieren lassen? Das mit den HEADERS und RESSOURCES ist ja noch einleuchtend.. aber diese Pfada im unteren Teil der pro Datei blick ich nivht ganz durch... ich hab mal ne Beispiel Datei genommen und den oberen Teil abgeändert... der untere Teil ist noch so wie vom Qt Beispiel:

Code: Alles auswählen

HEADERS       = main_window.hpp
SOURCES       = main.cpp \
                main_window.cpp
#! [0]
RESOURCES     = application.qrc
#! [0]

# install
target.path = $$[QT_INSTALL_EXAMPLES]/mainwindows/application
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS application.pro images
sources.path = $$[QT_INSTALL_EXAMPLES]/mainwindows/application
INSTALLS += target sources
also ab #install hab ich nix mehr geändert...

Verfasst: 30. Juli 2009 14:59
von Exasperation
Okay die .pro-Datei lässt sich erstellen indem man mit cmd in den ordner geht in dem das VS projekt liegt und dann qmake -project ausführt...

Allerdings kann ichs immer noch nicht erstellen.. kompilieren geht, aber dann beim builden gibts nen Linker-Fehler...

Code: Alles auswählen

1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl qInitResources_application(void)" (?qInitResources_application@@YAHXZ)" in Funktion "_main".
1>C:\projects\transl_strip\transl_strip\Debug\transl_strip.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
:?: Die Umgebungsvariablen etc. stimmen eigentlich...

Verfasst: 31. Juli 2009 08:53
von Exasperation
So.. ich fass das jetzt mal kurz zusammen wie Ressourcen mit Qt verwaltet werden wenn man in C++ mit Visual Studio programmiert und nicht mit qmake kompiliert sondern direkt mit VS...

Eine .pro-Datei wie oben erwähnt braucht man nicht, sondern lediglich eine .qrc-Datei, in der man seine verwendeten Ressourcen (in meinem Fall .ico und .png Dateien) auflistet. Diese Datei sieht z.B. wie folgt aus:

Code: Alles auswählen

<!DOCTYPE RCC><RCC version="1.0">
 <qresource>
   <file>gfx/Icon_0.ico</file>
   <file>gfx/Icon_131.ico</file>
   <file>gfx/Icon_23.ico</file>
   <file>gfx/Icon_20.ico</file>
   <file>gfx/Icon_228.ico</file>
   <file>gfx/Icon_156.ico</file>
   <file>gfx/exit.png</file>
 </qresource>
 </RCC>
Die .qrc Datei erstellt ihr einfach im selben Ordner, in dem auch die Projektdatei liegt.

So, die Integration in euer Projekt erfolgt über eine .cpp, die ihr folgender maßen per Konsole erstellt. Oder schreibt euch am besten eine .bat, dann müsst ihr in der Konsole nicht erst in euren Ordner wechseln.

Code: Alles auswählen

rcc eure_ressourcen.qrc -o neue_datei.cpp
Die erstelle .cpp-Datei müsst ihr nun nur noch in euer Projekt aufnehmen.

Als Alternative bin ich grade dabei eine eigene Build-Regel für VS zu schreiben, damit ihr nicht selbst eine .cpp erstellen müsst, sondern dass die .qrc-Datei, in der ihr eure Ressourcen aufzählt automatisch zu einer .cpp kompiliert wird. Sollte für euch nicht allzu schwer sein.

/edit: So, ab sofort wird meine .qrc-Datei automatisch mit kompiliert und im Build verwendet :)

Verfasst: 31. Juli 2009 11:52
von RHBaum
wenn du unbedingt beim MS Ressourcensystem bleiben willst, geht das natuerlich auch ....

Gibt dazu mehrere moglichkeiten.
eine ist:

mit LodIcon(LoadImage neuerdings), das ding aus den ressourcen holen.
DU hasst dann nen HIcon

mit GetIconInfo holst dir die IconInfo struktur zu dem HIcon ...

dann erzeugst nen neues QPixMap mittels QPixmap::fromWinHBITMAP();
die Colorbitmap steht in im hbmColor der IconInfo struktur.

Der Weg über die QT ressourcen ist natuerlich einfacher und fehlerunanfaelliger. wenn man kann sollt man das nutzen. Aber manchmal ist man halt auch an altlasten gebunden ....

Ciao ....