Seite 1 von 1

[gelöst]Problem mit Resourcen

Verfasst: 14. Februar 2007 09:03
von SuperSonik
Hallo Leute,
ich habe ein Problem mit Resourcen.
Ich verwende die Qt 4.2.2 open Source Version von Qt
Ich würde gerne zwei Icons in meinem Programm verwenden,
eins als WindowIcon und eines als SystemTrayIcon.

also habe ich eine .qrc Datei angelegt:

Code: Alles auswählen

<!DOCTYPE RCC><RCC version="1.0">
 <qresource >
    <file>logo.jpg</file>
 </qresource>
 </RCC>
Und danach an den entsprechenden Stellen im Programm
folgende Aufrufe gemacht:

Code: Alles auswählen

...
MainWindow->setWindowIcon(QIcon(QString::fromUtf8(":logo.jpg")));
...
trayicon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":logo.jpg")));
trayicon->show();
...
Bei mir klappt das auch wunderbar, nur auf den Zielsystemen werden die Icons nicht angezeigt. Beim SystemTrayIcon wird nur der entsprechende Platz im SystemTray neben der Uhr gemacht, aber das Icon wird nicht angezeigt. Anklicken kann man's aber und die entsprechenden Aktionen (rechtklick -> Kontextmenü etc) tuns auch.
Die Zielsysteme sind sowohl Windows 2000 als auch Windows XP und unter beiden funktionierts nicht.
Allerdings funktionierts unter beiden Systemen wenn ich dort QT vollständig installiere!? Es funktioniert auch nur mit .jpg Dateien, ich habs
mit .gif, .png, .ico versucht das tuts nicht.
Hat jemand eine Ahnung woran das liegen könnte?
Gruß,
SuperSonik

Verfasst: 14. Februar 2007 09:11
von Christian81
Die rc-Datei passt irgendwie nicht zu deinem Code.
jpg wird standardmäßig als Plugins gebaut - also fehlen ggf. die Plugins.
gif wird standardmäßig nicht unterstützt, man kann es aber als Plugin oder intern bauen.
png sollte eigentlich intern sein und deshalb funktionieren.
ico kann nicht funktionieren da es von Qt nicht unterstützt wird.

Verfasst: 14. Februar 2007 10:07
von SuperSonik
Christian81 hat geschrieben:Die rc-Datei passt irgendwie nicht zu deinem Code.
jpg wird standardmäßig als Plugins gebaut - also fehlen ggf. die Plugins.
gif wird standardmäßig nicht unterstützt, man kann es aber als Plugin oder intern bauen.
png sollte eigentlich intern sein und deshalb funktionieren.
ico kann nicht funktionieren da es von Qt nicht unterstützt wird.
Wie müßte ich die rc-Datei den abändern? Ich habe sie nach bestem Wissen und Gewissen nach der Dokumentation gemacht. Die Bilddateien liegen im selben Ortner wie die cpp Dateien und die rc-Datei. (ich weiß, ist nicht optimal aber ich wollte es erstmal hinbekommen)
Wie komme ich denn an diese Plugins -> bekommt man die open Source oder nur in der Kaufversion?
Gruß,
SuperSonik

Verfasst: 14. Februar 2007 10:09
von Christian81
Die Plugins werden mitkompiliert (und liegen in Qt4-src/plugins/...). Schau mal in die Doku zu Plugins, und Imageformats.
Das mit dem rc-File verstehe ich nicht - wo steht dort was von web_logo.jpg ? Ich sehe da nur logo.jpg ...

Verfasst: 14. Februar 2007 10:10
von SuperSonik
Christian81 hat geschrieben:Die Plugins werden mitkompiliert (und liegen in Qt4-src/plugins/...). Schau mal in die Doku zu Plugins, und Imageformats.
Das mit dem rc-File verstehe ich nicht - wo steht dort was von web_logo.jpg ? Ich sehe da nur logo.jpg ...
Oh, sorry im Code lautet das auch logo.jpg. Ich habs oben mal geändert.

Verfasst: 14. Februar 2007 16:09
von franzf
Lädst du das Reource-file auch brav mit Q_INIT_RESOURCE in deiner main()?

Verfasst: 14. Februar 2007 16:49
von mathies
Hi,

ich übersetze das sourcefile immer mit. So kannst Du Dir z.B. für Bilder eines Anlegen wie in meinem Beispiel.

Source-File:

Code: Alles auswählen

<RCC version="1.0">
	<qresource prefix="">
    <file>../img/ein_bild.png</file>
  </qresource>
</RCC>
Übersetzen des Sourcefiles in eine *.cpp Datei:

Code: Alles auswählen

rcc -o images.cpp images.qrc
Und dann kannst Du das Bild ganz normal verwenden, wenn Du, in diesem Fall, die images.cpp mit compilierst. Beachten mußt Du nur, dass Du einen Doppelpunkt vor die Pfadangabe setzt und den gleichen Pfad benutzt der auch in der *.qrc steht (falls Du halt einen Unterordner oder so für Bilder etc. hast)

Code: Alles auswählen

QPixmap qpm_image(":img/ein_bild.png");
qla_anzeige->setPixmap(qpm_image);
Du kannst das mit dem rcc auch automatisch machen lassen beim Übersetzen, bei beutzerdefinierten Schritten. Oder halt manuell in ner kleinen Batch-Datei.

Grüßle,
Matthias

Verfasst: 14. Februar 2007 20:16
von SuperSonik
franzf hat geschrieben:Lädst du das Reource-file auch brav mit Q_INIT_RESOURCE in deiner main()?
Nein, bisher nicht. Das muß man? :shock:
Ok, ich versuchs mal
Gruß,
SuperSonik

Verfasst: 14. Februar 2007 21:10
von franzf
SuperSonik hat geschrieben:
franzf hat geschrieben:Lädst du das Reource-file auch brav mit Q_INIT_RESOURCE in deiner main()?
Nein, bisher nicht. Das muß man? :shock:
Müssen nicht (laut Doku), aber auf bestimmten System kann es erforderlich werden.
Schau mal hier, vllt. findest du den ausschlaggebenden Tip ;)

z.B.
* Resource-file in deine *.pro eintragen
* Einbinden ala

Code: Alles auswählen

cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);
also ":/resource.jpg"
* ...

Grüße
Franz

Verfasst: 15. Februar 2007 09:46
von SuperSonik
franzf hat geschrieben:
SuperSonik hat geschrieben:
franzf hat geschrieben:Lädst du das Reource-file auch brav mit Q_INIT_RESOURCE in deiner main()?
Nein, bisher nicht. Das muß man? :shock:
Müssen nicht (laut Doku), aber auf bestimmten System kann es erforderlich werden.
Schau mal hier, vllt. findest du den ausschlaggebenden Tip ;)

z.B.
* Resource-file in deine *.pro eintragen
* Einbinden ala

Code: Alles auswählen

cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);
also ":/resource.jpg"
* ...

Grüße
Franz
Hi,
danke erstmal für die Tipps.
Q_INIT_RESOURCE war nicht der Grund. Ich hab's auch mit ":/" statt ":" versucht aber das hilft auch nicht.
In meine *.pro habe ich das eingetragen:

Code: Alles auswählen

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .
QT += network
# Input
#FORMS += GAB_tool.ui
RESOURCES += gabtool.qrc
SOURCES += main.cpp
HEADERS +=ui_GAB_tool.h
Die Doku habe ich auch schon gelesen. Die in meinem Qt Assistant ist die selbe wie in Deinem Link, leider habe ich dadurch keine neuen Ideen bekommen. Die generelle Verwendung ist mir ja klar.
Komisch ist halt das
es auf Systemen wo die komplette Qt Instaltion vorhanden ist (also das Entwicklungssystem) funktioniert. Aber auf Systemen wo dies nicht der Fall ist funktioniert's nicht. Irgendwie scheinen die Dateien nicht fest eingebunden zu werden sondern die Entwicklungsumgebung lädt die nach ??!
Gruß,
SuperSonik

Lösung des Problems

Verfasst: 15. Februar 2007 13:53
von SuperSonik
Hi Leute,
ich habe herausgefunden woran es gelegen hat.
Qt unterstützt von sich aus kein jpg sondern über Plugins.
Wenn man ein Qt Programm ausliefern möchte und man hat ein solches Plugin benutzt muß man den entsprechenden Ordner ,der im Qt Verzeichniss
unter plugins zu finden ist, mit in den Installationsordner kopieren und
dann den Ordner mit

Code: Alles auswählen

QCoreApplication::addLibraryPath ("./imageformats/");
in der main - Funktion setzen.
Näheres findet man im Qt Assistenten wenn man nach "deploying Qt Applications" sucht.
Gruß,
SuperSonik

Verfasst: 15. Februar 2007 16:22
von Christian81
Christian81 hat geschrieben: jpg wird standardmäßig als Plugins gebaut - also fehlen ggf. die Plugins.
Als würde man gegen eine Wand reden... :roll:

Verfasst: 16. Februar 2007 08:48
von SuperSonik
Christian81 hat geschrieben:
Christian81 hat geschrieben: jpg wird standardmäßig als Plugins gebaut - also fehlen ggf. die Plugins.
Als würde man gegen eine Wand reden... :roll:
Ja, sorry ich hatte das schon gesehen. Ich hatte dann in der Duko nachgeschaut, aber vorallem Sachen zum erstellen eigener Plugins gefunden.
Dannach hatte ich versucht einfach die in den Plugins vorhandenen .dlls mit
zu installieren. :oops:

Gruß,
SuperSonik