KDE standard Icons laden
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
KDE standard Icons laden
Hallo!
Ich habe dieses Dokument gefunden, welches beschreibt, wie man ein KDE-Icon laden kann. Leider verwendet Lazarus jedoch Qt4-pur, ohne KDE Erweiterung. Also, ganz knapp: Wie kann ich die Icons in meinem Programm laden, ohne erst tonnenweise KDE C++-Header umschreiben zu müssen?
Ich habe dieses Dokument gefunden, welches beschreibt, wie man ein KDE-Icon laden kann. Leider verwendet Lazarus jedoch Qt4-pur, ohne KDE Erweiterung. Also, ganz knapp: Wie kann ich die Icons in meinem Programm laden, ohne erst tonnenweise KDE C++-Header umschreiben zu müssen?
Zuletzt geändert von Targion am Fr 2. Jan 2009, 20:25, insgesamt 1-mal geändert.
Re: KDE standard icons laden
Targion hat geschrieben:Hallo!
Ich habe dieses Dokument gefunden, welches beschreibt, wie man ein KDE-Icon laden kann. Leider verwendet Lazarus jedoch Qt4-pur, ohne KDE Erweiterung. Also, ganz knapp: Wie kann ich die Icons in meinem Programm laden, ohne erst tonnenweise KDE C++-Header umschreiben zu müssen?
Das laden dürfte das geringste Problem sein.
Wenn du wissen willst wie die heissen, kommst du wohl um das Anzapfen von KDE nicht drumrum. Vielleicht gibt's irgendwo Konfig-Dateien wo das auch drinsteht.
Aber ob das Versionsunabhängig ist.... ?
Wenn du eine Interface Lib schreiben willst, kannst du dich hier orientieren. Es geht zwar um was leicht anderes, aber zeigt das Handwerk ganz gut auf:
viewtopic.php?p=16911#p16911
Vielleicht findest du auch hier was, damit kenne ich mich aber nicht aus:
http://portland.freedesktop.org/xdg-utils-1.0/
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: KDE standard icons laden
Ich will keine neuen Icons installieren, nur die des aktuellen Standardiconsets unter KDE laden. Beim GTK2-Widgetset nutze ich dafür GTK2LoadIconResource, aber KDE ist ja in Lazarus nicht integriert, nur Qt. Also komme ich offensichtlich um die komplette Erweiterung von Qt4 um KDE nicht herum, wenn ich die Symbole haben will, oder?
Re: KDE standard icons laden
Targion hat geschrieben:Ich will keine neuen Icons installieren, nur die des aktuellen Standardiconsets unter KDE laden. Beim GTK2-Widgetset nutze ich dafür GTK2LoadIconResource, aber KDE ist ja in Lazarus nicht integriert, nur Qt. Also komme ich offensichtlich um die komplette Erweiterung von Qt4 um KDE nicht herum, wenn ich die Symbole haben will, oder?
Was heisst "komplette Erweiterung"?
Wenn du's so wie hier machst viewtopic.php?p=16911#p16911 kannst du dir wahrsch. durch das Interfacing der einen Funktion ein QPixmap zurückgeben lassen.
Aber Achtung, das dürfte nur gehen, wenn dein System auch QT4 benützt, sonst gibt's wahrsch. ein durcheinander.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: KDE standard Icons laden
Gut, Danke! Ich glaube, damit kann ich was anfangen. Meine C++-Kenntnisse sind zwar begrenzt, aber so kompliziert sieht's nicht aus und QPixmap ist ja schön dokumentiert.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: KDE standard Icons laden
Ich versuche nun schon seit Stunden, mir mit einen Iconloader zu erstellen, wie es hier für KDE4 beschrieben ist, aber ich bekomme immer die Meldung, dass global() privat sei. Das kann es aber nicht sein, da andere Projekte genau diesen Befehl nutzen. Kennt sich jemand damit aus?
Hier ist mein Code:
Und da alle Meldungen des Compilers:
Code: Alles auswählen
KIconLoader* icl = KIconLoader::global();
Hier ist mein Code:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <kiconloader.h>
#include <iostream>
extern "C" {
QPixmap* Get_KDE_Icon(char inm)
{
KIconLoader* icl = KIconLoader::global();
return icl->loadIcon(QString(inm), KIconLoader::Desktop);
}
}
Und da alle Meldungen des Compilers:
Code: Alles auswählen
cd '/home/ximion/Development/bindings/libkbind' && VERBOSE="1" LC_MESSAGES="C" LC_CTYPE="C" /usr/bin/make -k -j1
/usr/bin/cmake -H/home/ximion/Development/bindings/libkbind -B/home/ximion/Development/bindings/libkbind --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/ximion/Development/bindings/libkbind/CMakeFiles /home/ximion/Development/bindings/libkbind/CMakeFiles/progress.make
/usr/bin/make -f CMakeFiles/Makefile2 all
Wechsele in Ordner /home/ximion/Development/bindings/libkbind
/usr/bin/make -f src/CMakeFiles/libkbind.dir/build.make src/CMakeFiles/libkbind.dir/depend
In file included from /home/ximion/Development/bindings/libkbind/src/libkbind.cpp:3:
/usr/include/kiconloader.h:25:26: error: QtCore/QString: No such file or directory
/usr/include/kiconloader.h:26:30: error: QtCore/QStringList: No such file or directory
/usr/include/kiconloader.h:27:26: error: QtCore/QObject: No such file or directory
In file included from /usr/include/kdecore_export.h:24,
from /usr/include/kglobal.h:22,
from /usr/include/kiconloader.h:29,
from /home/ximion/Development/bindings/libkbind/src/libkbind.cpp:3:
EDIT: Rescode entfernt, machte den Thread unglaublich unübersichtlich.
Zuletzt geändert von Targion am Do 22. Jan 2009, 18:34, insgesamt 1-mal geändert.
Re: KDE standard Icons laden
Also sowas kompiliert im Prinzip (k.A. ob's funzt)
KIconLoader *loader = KGlobal::iconLoader();
pixmap = loader->loadIcon(QString(inm), KIcon::Desktop);
Aber ich würde das ehrlich gesagt als externe Anwendung machen, welche die Pixmaps speichert oder zurückstreamt.
Sonst kommst du in Teufel's Küche mit den QT und KDE Versionen deiner Anwendung und der Platform wo das ganze drauf läuft.
Ausserdem könnte man dann das Resultat auch aus GTK benützen, was mit QPixmap ja afaik nicht möglich ist.
KIconLoader *loader = KGlobal::iconLoader();
pixmap = loader->loadIcon(QString(inm), KIcon::Desktop);
Aber ich würde das ehrlich gesagt als externe Anwendung machen, welche die Pixmaps speichert oder zurückstreamt.
Sonst kommst du in Teufel's Küche mit den QT und KDE Versionen deiner Anwendung und der Platform wo das ganze drauf läuft.
Ausserdem könnte man dann das Resultat auch aus GTK benützen, was mit QPixmap ja afaik nicht möglich ist.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: KDE standard Icons laden
Folgender Code:
kompiliert inzwischen. Kann das so funktionieren? Wie bringe ich das QBitmap nun auf ein Lazarus-Form und wie wandle ich es in ein echtes TBitmap um? Einen Wrapper habe ich geschrieben, der funktioniert aber wohl wegen einer falschen libqt4intf.so im Moment nicht richtig.
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <qbitmap.h>
#include <kiconloader.h>
#include <iostream>
extern "C" {
QBitmap Get_KDE_Icon(char inm)
{
KIconLoader *icl = KIconLoader::global();
QPixmap icon = icl->loadIcon(QString(inm), KIconLoader::Desktop);
return QBitmap(icon);
}
}
kompiliert inzwischen. Kann das so funktionieren? Wie bringe ich das QBitmap nun auf ein Lazarus-Form und wie wandle ich es in ein echtes TBitmap um? Einen Wrapper habe ich geschrieben, der funktioniert aber wohl wegen einer falschen libqt4intf.so im Moment nicht richtig.
Zuletzt geändert von Targion am Do 22. Jan 2009, 19:01, insgesamt 1-mal geändert.
Re: KDE standard Icons laden
Was das konkret ist, weiss ich auch nicht. Kannst ja in einem C++ Forum fragen.
Aber ich würde mal tippen, dass du über extern "C" höchstens einen Zeiger auf die Instanz zurückgeben kannst. Also QPixmap* .
Was ich von der ganzen Geschichte halte, habe ich dir oben schon geschrieben.
Aber ich würde mal tippen, dass du über extern "C" höchstens einen Zeiger auf die Instanz zurückgeben kannst. Also QPixmap* .
Was ich von der ganzen Geschichte halte, habe ich dir oben schon geschrieben.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: KDE standard Icons laden
Wenn ich jedes Icon erstmal zwischenspeichere, daurt es ewig, bis alle Icons geladen sind. Streamen von Icons würde Interprozesskommunikation vorraussetzen (wenn ich mich nicht irre) und das zwischen einer Pascal und C++ Anwendung könnte auch problematisch werden.
Re: KDE standard Icons laden
Also so ähnlich müsste das eig. schon gehen:
http://wiki.lazarus.freepascal.org/Exec ... en_Outputs
Dann rufst du das C++ Prog mit Parameter auf und liest den Output ein.
Diese Lösung könnte man dann auch mit GTK etc. benutzen. Du müsstest nat. ein PNG oder sowas zürückgeben.
http://wiki.lazarus.freepascal.org/Exec ... en_Outputs
Dann rufst du das C++ Prog mit Parameter auf und liest den Output ein.
Diese Lösung könnte man dann auch mit GTK etc. benutzen. Du müsstest nat. ein PNG oder sowas zürückgeben.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: KDE standard Icons laden
Wie gebe ich denn ein Bitmap als Output aus? das Teil in strings umwandeln und mit write() ausgeben kann's ja nicht sein.
Re: KDE standard Icons laden
Targion hat geschrieben:Wie gebe ich denn ein Bitmap als Output aus? das Teil in strings umwandeln und mit write() ausgeben kann's ja nicht sein.
Bin kein C Experte. Musst dich halt schlau machen: http://icecube.wisc.edu/~dglo/c_class/stdio.html