KDE standard Icons laden

Antworten
Targion
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

Beitrag von Targion »

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?
Zuletzt geändert von Targion am Fr 2. Jan 2009, 20:25, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: KDE standard icons laden

Beitrag von theo »

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/

Targion
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

Beitrag von Targion »

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?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: KDE standard icons laden

Beitrag von theo »

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.

Targion
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

Beitrag von Targion »

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.

Targion
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

Beitrag von Targion »

Ich versuche nun schon seit Stunden, mir mit

Code: Alles auswählen

KIconLoader* icl = KIconLoader::global();
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:

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.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: KDE standard Icons laden

Beitrag von theo »

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.

Targion
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

Beitrag von Targion »

Folgender Code:

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.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: KDE standard Icons laden

Beitrag von theo »

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.

Targion
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

Beitrag von Targion »

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.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: KDE standard Icons laden

Beitrag von theo »

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.

Targion
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

Beitrag von Targion »

Wie gebe ich denn ein Bitmap als Output aus? das Teil in strings umwandeln und mit write() ausgeben kann's ja nicht sein.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: KDE standard Icons laden

Beitrag von theo »

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

Antworten