Anzeige:
Ergebnis 1 bis 15 von 15

Thema: [Kde&Qt] Kickerapplet

  1. #1
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667

    [Kde&Qt] Kickerapplet

    Hallo Leute,


    das ist wirklich zum verzweifeln :

    ich mochte jetzt gerne ein kickerapplet programmieren und waehlte mir dafuer ein beispiel aus, hier der code:

    helloworldapplet.h:

    Code:
    #ifndef HELLOWORLD_H
    #define HELLOWORLD_H
    #include <kpanelapplet.h>
    
    class HelloWorldApplet : public KPanelApplet
    {
    
    
    public:
    
      HelloWorldApplet( const QString& configFile, Type t = Stretch,
                        int actions = 0, QWidget *parent = 0,
                        const char *name = 0 );
    
      int widthForHeight( int height ) const;
    
      int heightForWidth( int width ) const;
    
    };
    #endif //HELLOWORLD_H
    helloworldapplet.cpp:

    Code:
    #include <kpanelapplet.h>
    #include <klocale.h>
    #include <kglobal.h>
    #include "helloworldapplet.h"
    
    
    HelloWorldApplet::HelloWorldApplet( const QString& configFile,
                                      Type type, int actions,
                                      QWidget *parent, const char *name )
    
      : KPanelApplet( configFile, type, actions, parent, name )
    
    {
      setBackgroundColor( blue );
    
      setFrameStyle( StyledPanel | Sunken );
    }
    
    int HelloWorldApplet::widthForHeight( int h ) const
    {
      return h; // we want to be quadratic
    }
    
    int HelloWorldApplet::heightForWidth( int w ) const
    {
      return w; // we want to be quadratic
    }
    
    
    
    
    
    
    extern "C"
    {
      KPanelApplet* init( QWidget *parent, const QString& configFile )
      {
          KGlobal::locale()->insertCatalogue( "libhelloworldapplet");
    
          return new HelloWorldApplet( configFile, KPanelApplet::Normal,
                                       0, parent, "libhelloworldapplet");
      }
    }
    und letztendlich die helloworldapplet.desktop:

    Code:
    [Desktop Entry]
    Name = Hello World
    Comment = Hello World Applet
    X-KDE-Library = libhelloworldapplet
    X-KDE-UniqueApplet = true

    ihr koennt mir glauben, ich HABE es versucht, 2 stunden lang, aber ich bekomme das nicht zum laufen. ich wuerde mal behaupten, am code stimmt alles, nur mit den hinweisen von developer.kde.org und mit qmake bekomme ich kein makefile hin was funktioniert. deswegen poste ich mal keine fehlermeldungen und aehnliches sondern frage euch einfach:

    wie kriege ich den oben genannten code zu einem richtigen applet?



    als executable darf man das ja scheinbar auch net linken oder?


    ueber hilfe waere ich SEHR erfreut


    gruss tuxipuxi

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, bei solchen Plugins sind die Makefiles nicht mehr ganz trivial, da braucht man Haufenweise Compiler- und Linkerflags.

    Ich schätze am einfachsten ist es da, sich von KDevelop ein Kickerapplet generieren zu lassen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi anda_skoa,

    habe ich jetzt getan. habe in kdevelop (2.15) new project -> kde kicker applet gemacht.
    das erste was mich verwirrte, war, dass da stand "[...] for kde2 " .

    naja also hab ich das gemacht und files generieren lassen und am code UEBERHAUPT nichts gemacht, nur kompiliert und installiert... hat auch geklappt. nur finden kann ich das applet nun nicht in der appletliste. muss man vielleicht irgendeine variable mit searchpath anpassen?

    ciao tuxipuxi

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Kommt drauf an, mit welchem Prefix du configure aufgerufen hast.
    Wenn ohne, dass hat er glaub ich nach /usr/local/kde installiert.

    Finde das Verzeichnis herraus und mach dann in einer Konsole

    #> export KDEDIRS=/usr/local/kde:/normaler/kde/prefix
    #> kbuildsycoca

    /usr/local/kde durch den Pfad ersetzen, in dem dein Applet installiert wurde.
    /normaler/kde/prefix erhälts du am einfachsten mit
    #> kde-config --prefix

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    Code:
    [tuxipuxi@localhost kdetection2]$ export KDEDIRS=/usr/local/kde:/usr:/usr/local/kde/lib
    und kbuildsycoca hab ich gemacht, das applet steht noch immer nicht in der liste.
    ich versteh das einfach nicht. ich hab daran ja garnichts gemacht, kdevelop sollte doch irgendwie funktionierende makefiles erstellen :-/

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm.

    Schau mal, ob das .so des Applets installiert wurde.
    Wenn ja, dann steht vielleicht im .desktop des Applets ein falscher Name.
    Kontrollier auch, ob es in /usr/local/kde/share/apps/kicker/applets auftaucht.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    abgesehen vom projektordner existieren:

    Code:
    /home/tuxipuxi/.kde/share/apps/RecentDocuments/lo32-app-kdetection.png.desktop
    /usr/local/kde/lib/libkdetection.so.1.0.0
    /usr/local/kde/lib/libkdetection.so.1
    /usr/local/kde/lib/libkdetection.so
    /usr/local/kde/lib/libkdetection.la
    /usr/local/kde/share/apps/kicker/applets/kdetection.desktop
    /usr/local/kde/share/icons/locolor/32x32/apps/kdetection.png

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, sieht alles korrekt aus.
    Im .desktop File steht auch libkdetection, oder?

    Schon probiert ob es hilft, kicker neu zu starten?
    Eventuell mit
    #> dcop kicker Panel restart

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    im .desktop file steht das:

    [Desktop Entry]
    Comment=A panel applet called KDetection
    Name=kdetection
    X-KDE-Library=libkdetection


    restart vom panel bringt auch nichts

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich habs jetzt herumprobier, bis es doch noch gegangen ist.

    Probier mal, das export KDEDIRS=/usr/local/kde:/usr
    ins dein startkde Script zu schreiben.

    Wenn du nicht dein Haupt KDE neu starten willst, bietet es sich an, einen User für KDE Tests anzulegen.
    Dann startest du eine Xnest Session, machst auf einem Terminal su - testuser und setzt dort die nötigen Variablen.
    Also KDEDIRS, DISPLAY und startest dann startkde

    also
    1#> Xnest :1

    2#> xhost +localhost
    2#> su - testuser
    2#> export KDEDIRS=...
    2#> export DISPLAY=:1
    2#> startkde

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    vielen dank schonmal.

    wo schreib ich denn am besten das mit dem export hin? da sind ja doch rechtviele anweisungen und ich moechte das ungerne an eine gefaehrliche stelle setzen.

    Xnest hab ich irgendwie nicht.

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wenn du aus einer Shell startest, brauchts du KDEDIRS nicht in startkde einfügen.
    Sonst am Anfang.

    bei mir steht es so drinnen
    Code:
    #!/bin/sh
    #
    #  DEFAULT KDE STARTUP SCRIPT ( KDE-3.1 )
    #
    
    export KDEDIRS=/usr/:/usr/local/:/usr/local/kde:$KDEDIRS

    Xnest gibt es sein XFree4, ist aber wahrscheinlich in einem extra Paket.
    Ganz feine Sache, startet einen XServer im Fenster einer laufenden XSession.

    Das erspart das starten einer neuen XSession auf VT8

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hey spitze das geht jetzt.... vielen dank
    echt super.

  14. #14
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    ich hab jetzt mal in die generierte appletklasse meine includet und ein objekt davon erzeugt, das eigentlich nur eine KLed enthaelt. nach dem appletstart konnte ich die aber nicht sehen.
    im beispiel wird fuer das erzeugte objekt die methode show() aufgerufen, hab ich auch gemacht aber es kommt beim kompilieren:

    Code:
    In file included from detect_applet.cpp:23:
    applet_view.h:45:1: warning: no newline at end of file
    /usr/lib/qt3/include/qwidget.h: In constructor `Detect_applet::Detect_applet(const QString&, KPanelApplet::Type, int, QWidget*, const char*)':
    /usr/lib/qt3/include/qwidget.h:343: `virtual void QWidget::show()' is inaccessible
    detect_applet.cpp:45: within this context
    woran kann das liegen?

    gruss tuxipuxi


    edit: und schon ein update:

    es funktioniert gerade was aehnliches, ich melde mich gleich zurueck

    editedit:

    gaannzz mysterioes. also in derapplet klasse( also von KPanelApplet abgeleitet ),
    darf ich fuer mein widget mit der KLed drin kein show aufrufen( meldung siehe oben ).

    wenn ich jetzt in meiner Widgetklasse show fuer den button aufrufe, oeffnet sich nach appletstart ein eigenes fenster mit dem widget dadrin.

    rufe ich in der widget show fuer this auf zeigt sich wieder garnix ... wofuer muss man jetzt show aufrufen?

    editeditedit:

    bei dem kde tutorial "extending the KDE Panel" bin ich bei den tips auf folgendes gestossen:

    Code:
     Tips 'n' tricks
    
    Never call show() in the applet's constructor. There is absolutely no reason to call show() in a widget constructor. The reason why this is important for panel applets is that QXEmbed (kdelibs/kdecore/qxembed.h), the class used to embed external applets (those run via the proxy) into kicker, often suffers from race conditions when a window is visible before it is reparented.
    
    As panel applets provide but a very small GUI it is often easier to do the layouting by hand in the resizeEvent() instead of using QLayout.
    ja nun, ohne show sehe ich doch aber nix?
    Geändert von tuxipuxi (30-03-2003 um 13:22 Uhr)

  15. #15
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Normalerweise sollte es auch ohne explizites show() gehen.
    Denn das PanelApplet bekommt ja das show und leitet es entsprechend an seine Kinder weiter.

    Ist das Applet auch sicher das Parent Widget deines Views?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •