Seite 1 von 1
:?: Icons bzw. Symbole für Buttons, Menus etc...
Verfasst: 15. September 2004 16:22
von john
Hallo,
wie kann man z. B. ein Icon für einen Button in die *.exe Datei fest integrieren? Hier z. B. die Icon Zuweisung für den "Such-Knopf":
...
SearchButton->setIconSet(QPixmap::fromMimeSource("./search.jpg"));
...
so, soweit so gut. Wenn ich nun das Programm starte sieht alles so aus wie gewollt, solange die serch.jpg sich auch im Programmverzeichnis befindet. Wenn diese Datei jedoch nicht mehr vorhanden ist, fehlt das Icon für den "Such-Knopf". Da gibt es doch bestimmt eine Möglichkeit, dieses Bild fest zu integrieren, damit man nicht immer die *.jpg Datei mit liefern muss.
Wie macht man das?
Vielen Dank!
Grüße John
Verfasst: 15. September 2004 16:38
von lepsai
du konvertierst deine Bilddatei in das XPM-Format z.B bild.xpm
dann in deinen Sourcen:
#include "bild.xpm"
QPixmap p(bild);
button.setPixmap(bild);
.xpm-dateien sind Textdateien in denen ein Bild in einem C-Array abgespeichert wird. Der name der entsprechenden Variable steht am Anfang der Datei.
Verfasst: 15. September 2004 16:50
von pm_Snake
Da musst du halt dann die xpm-Datei mitliefern
Aber n paar Dateien mehr in nem Projekt ist auch nicht die Welt...
Verfasst: 15. September 2004 16:56
von lepsai
ne, eben nicht...
die Bilder werden in die EXE reingelinkt. Das ist ja auch der Sinn der Sache...
Verfasst: 15. September 2004 17:19
von pm_Snake
Ach, k.
Das ist dann die Art, wo ein neuer header mit im Projekt ist mit ungefähr diesem Inhalt:
# = <rgb schwarz>;
* = <rgb rot>;
$ = <rgb gold>;
############
############
***************
***************
$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$
Das XPM wäre dann eine Deutschlandflagge..
Stimmts?^^
Verfasst: 16. September 2004 10:32
von john
Vielen Dank für die Antworten! Aber das geht auch irgendwie mit
Button->setIconSet(QPixmap::fromMimeSource("./search.jpg"));
? Ich habe das Buch "Programming with QT 3". Die fertig übersetzten Beispiele haben die Icons fest in der Exe integriert, auch in so einem Text-Array. Muss nochmal nachsehen, ob ich ein passendes Beispiel finde. Hat das vielleicht was mit der *.pro Datei zu tun? Oder liegt es daran, dass die Non-Comercial-Version das nicht macht?
Vielen Dank!
Grüße John
Verfasst: 1. Oktober 2004 10:03
von lori
Hallo,
ich habe mom. ein Problem bzgl. Pixmap, include xpm und QLabel
Als QLabel soll dann die Pixmap picture.xpm verwendet werden.
Code: Alles auswählen
QLabel *zeile1 = new QLabel( win );
QPixmap myPixmap3=QPixmap("./picture.xpm","XPM",QPixmap::Color);
zeile1->setPixmap(myPixmap3);
das funktioniert auch soweit, nur würde ich jetzt das xpm mit include einbinden, dass ich das Bild nicht dabei haben muss und das ganze übersichtlicher wird.
Code: Alles auswählen
#include "picture.xpm"
QLabel *zeile1 = new QLabel ( win );
QPixmap myPixmap3(picture);
zeile1->setPixmap(myPixmap3);
Das Bild wird gefunden und included, beim Kompilieren bekomme ich dann
`char*image[194]' defined but not used und 'picture undeclared'
bei #include picture.xpm sollte doch picture definiert werden, oder sehe
ich das falsch.
Verfasst: 1. Oktober 2004 12:47
von needle
moin,
man kann im Designer für ein Widget im Context Menu unter Form Settings die Einstellung vornehmen, ob man Pixmaps inline im Widget-Code oder im Project-Image-File (Einzusehen im Menu unter Project/Image Collection) speichern möchte. Ausserdem kann man noch eine eigene Funktion angeben, wobei ich jetzt auch nicht adhoc sagen kann was da hinter steckt.
Wenn ich pixmaps so einbinde kompiliert er mir die auch in mein Binary, so daß ich dort keine grafik files mehr einzeln zur Funktion mitgeben muß.
(gespeichert werden die dann inline als xpm.gz in dem jeweiligem .ui File)
Ich hoffe ich habe jetzt nicht am Thema vorbei geschrieben.
gruss,
needle
Verfasst: 1. Oktober 2004 12:55
von needle
@lori:
es geht AFAIR auch so:
Code: Alles auswählen
aus Doku:
QPixmap QPixmap::fromMimeSource ( const QString & abs_name ) [static]
=>
Code: Alles auswählen
QPixmap myPixmap3=QPixmap::fromMimeSource( "picture.xpm" );
gruss,
needle
Verfasst: 1. Oktober 2004 14:04
von Christian81
lori hat geschrieben:Hallo,
Code: Alles auswählen
#include "picture.xpm"
QLabel *zeile1 = new QLabel ( win );
QPixmap myPixmap3(picture);
zeile1->setPixmap(myPixmap3);
Das Bild wird gefunden und included, beim Kompilieren bekomme ich dann
`char*image[194]' defined but not used und 'picture undeclared'
bei #include picture.xpm sollte doch picture definiert werden, oder sehe
ich das falsch.
Schau dir mal dein picture.xpm an. Das Bild heisst nicht 'picture' sondern 'image... Also musst Du auch myPixmap(image); nehmen

Verfasst: 4. Oktober 2004 11:53
von lori
Hi Christian,

- bin aber auch dämlich

hast Recht, ist natürlich als image[] und nicht picture[] definiert. Besten Dank!
Ich bekomme jetzt noch folgende Fehlermeldung
warning: no newline at end of file
das habe ich behoben.
es scheint noch irgendwas falsch zu laufen, jetzt bleibt noch:
error: call of overloaded `QPixmap(char*[194])' is ambiguous
/usr/include/qt3/qpixmap.h:76: error: candidates are: QPixmap::QPixmap(const QPixmap&) <near match>
/usr/include/qt3/qpixmap.h:74: error: QPixmap::QPixmap(const QByteArray&) <near match>
/usr/include/qt3/qpixmap.h:73: error: QPixmap::QPixmap(const char**) <near match>
Verfasst: 4. Oktober 2004 12:31
von Christian81
Hier steht des Rätsels Lösung
http://doc.trolltech.com/3.3/qpixmap.html#QPixmap-7
QPixmap myPixmap3((const char**)image);
Verfasst: 4. Oktober 2004 13:16
von lori
yups! - den QT Assistent hab ich eigentlich zum Nachsehen

dachte aber nicht, dass ich die Lösung da drin finde... danke dir!