Anzeige:
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 16 bis 30 von 55

Thema: Tutorial zu KParts?

  1. #16
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von TheDodger
    ich nutze kein KDevelop, oder automake ich erstelle meine Makefiles via qmake.
    Ich habe aber gestern abend noch rausgefunden, was wohin gehört:
    Ah, bei einem KDE Programm bin ich davon ausgegangen, dass du zumindest das autmoake Framework von KDE benutzt.
    Ein entsprechendes AppTemplate gibt es im kdesdk Paket.
    So mußt du alle Include und Linker Flags selber definieren und das möglichst System unabhängig


    $(KDEDIR)/share/services/
    $(KDEDIR)/share/servicetypes/
    Ja, abhängig vom prefix, in dem das Programm installiert wird.
    kde-config --paths servicetypes
    bzw
    kde-config --oaths services
    listen alle Verzeichnissse auf, in denen gesicht wird (immer share/services in allen Dirs aus KDEDIRS, etc)

    kde-config --install service
    etc. sollte ansich den Pfad liefern, wenn mit dem selben Prefix konfiguriert wird, mit dem die KDE Installation konfiguriert wurde.


    Naja, dann such ich halt.
    wie sieht's mit $(KDEDIR)/lib aus ?
    Lib nicht, sondern lib/kde2 bzw lib/kde3
    kde-config --paths module


    Hab ich noch nie mit gearbeitet ...
    Du startest einfach kdebugdialog und kreuzt die Nummern an, deren Output du willst.
    zum Beispiel 150 for kdecore (KLibLoader)
    Wenn du dann das KDE Programm aus der Konsole startest, dann kommt der entsprechende Debugoutput.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  2. #17
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von anda_skoa
    Ah, bei einem KDE Programm bin ich davon ausgegangen, dass du zumindest das autmoake Framework von KDE benutzt.
    Ein entsprechendes AppTemplate gibt es im kdesdk Paket.
    So mußt du alle Include und Linker Flags selber definieren und das möglichst System unabhängig
    das geht aber ganz gut
    Ich hab hier auf arbeit ein SuSE7.2 zu Hause eine SuSE8.0 und ein gentoo 1.4 und hab nix in den Project Dateien ändern müssen ...

    Ja, abhängig vom prefix, in dem das Programm installiert wird.
    kde-config --paths servicetypes
    Code:
    bodo@heino:~/src/jargo/jargo > kde-config --paths servicetypes
    kde-config: Unknown option '--paths'.
    kde-config: Use --help to get a list of available command line options.


    Lib nicht, sondern lib/kde2 bzw lib/kde3
    kde-config --paths module
    s.o. aber schau in den verzeichnissen mal nach ...

    Du startest einfach kdebugdialog und kreuzt die Nummern an, deren Output du willst.
    zum Beispiel 150 for kdecore (KLibLoader)
    Wenn du dann das KDE Programm aus der Konsole startest, dann kommt der entsprechende Debugoutput.
    Hab ich getan, aber auf der console habe ich (ausser meinen eigenen Debugausgaben) keine Fehlermeldung erhalten.
    Bodo
    Systemadmistration UNIX

  3. #18
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von TheDodger
    das geht aber ganz gut
    Ich hab hier auf arbeit ein SuSE7.2 zu Hause eine SuSE8.0 und ein gentoo 1.4 und hab nix in den Project Dateien ändern müssen ...
    Ich dachte auch mehr an Systeme, bei denen Libraries anderes heißen.
    Anderer Unixe zum Beispiel.
    Zwei Linux Distributionen sind da ja gleich.


    bodo@heino:~/src/jargo/jargo > kde-config --paths servicetypes
    kde-config: Unknown option '--paths'.
    kde-config: Use --help to get a list of available command line options.
    Sorry:
    --path

    (hint, hint) kde-config --help bzw kde-config --help-all


    Hab ich getan, aber auf der console habe ich (ausser meinen eigenen Debugausgaben) keine Fehlermeldung erhalten.
    Hmm, komisch.
    Vielleicht wurde dein KDE mit --disable-debug kompiliert.
    Evetuell probier noch
    #> export KDE_DEBUG=1
    vor dem Programmstart.

    Kannst du debug Output in den Factory Konstructor geben und schauen, ob er ausgeführt wird?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #19
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von anda_skoa
    Ich dachte auch mehr an Systeme, bei denen Libraries anderes heißen.
    Anderer Unixe zum Beispiel.
    Zwei Linux Distributionen sind da ja gleich.
    im moment denk ich noch nicht mal soweit!

    Sorry:
    --path

    (hint, hint) kde-config --help bzw kde-config --help-all
    Ich weiß!

    Code:
    bodo@heino:~/src/jargo/jargo > kde-config --help
    Usage: kde-config [Qt-options] [KDE-options] [options]
    
    A little program to output installation paths
    
    Generic options:
      --help                    Show help about options
      --help-qt                 Show Qt specific options
      --help-kde                Show KDE specific options
      --help-all                Show all options
      --author                  Show author information
      -v, --version             Show version information
      --license                 Show license information
      --                        End of options
    
    Options:
      --expandvars              expand ${prefix} and ${exec_prefix} in output
      --prefix                  Compiled in prefix for KDE libraries
      --exec-prefix             Compiled in exec_prefix for KDE libraries
      --localprefix             Prefix in $HOME used to write files
      --version                 Compiled in version string for KDE libraries
      --types                   Available KDE resource types
      --path type               Search path for resource type
      --userpath type           User path: desktop|autostart|trash|document
      --install type            Prefix to install resource files to
    da steht nur nix mit path usw.

    Hmm, komisch.
    Vielleicht wurde dein KDE mit --disable-debug kompiliert.
    Evetuell probier noch
    #> export KDE_DEBUG=1
    vor dem Programmstart.
    also hier habe ich die original SuSE rpm's installiert ....
    Beim gentoo System ... bin ich mir nicht sicher ...

    Ich probiers einfach mal.

    Kannst du debug Output in den Factory Konstructor geben und schauen, ob er ausgeführt wird?
    er kompiliert grad ...
    Bodo
    Systemadmistration UNIX

  5. #20
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    [QUOTE]Original geschrieben von anda_skoa

    Kannst du debug Output in den Factory Konstructor geben und schauen, ob er ausgeführt wird?
    [quote]

    Der Konstuctor wird überhaupt nicht aufgerufen ... ???
    Bodo
    Systemadmistration UNIX

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

    Heißt die Funktion richitg, die im extern "C" Block steht.
    init_libname
    wenn das lib File libname heißt?
    Steht der Name auch im service.desktop?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #22
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Ich glaube, ich fang da noch mal von vorn an zu programmieren ...

    (Ich hatte bislang nur die KLibFactory genutzt ...)

    BTW.noch mal für dumme, die Factory ... muß ich für jedes Plugin eine schreiben? Denke mal nicht.
    Bislang habe ich die Factory in mein Programm kompiliert und nicht in die plugins ...

    Ich denke mal, der Fehler liegt bei mir, weil ich da einiges noch nicht richtig verstanden habe ...
    Bodo
    Systemadmistration UNIX

  8. #23
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Eine Factory pro Plugin lib.

    Der LibLoader lädt die Pluginlibrary mit dlopen.
    Wenn man KLibLoader->factory() macht, wird das Symbol init_libname geholt und ausgeführt, dann der resultieren void* Pointer auf KLibFactory gecastet und zurück gegeben.

    Wenn man für alle Plugins eine gemeinsame BasisFactory gemacht hat, von denen die einzelnene Factories der Plugins ableiten, dann kann man jetzt auf diese BasisFactory casten.

    Wenn jede Pluginfactory direkt von KlibFactory ableitet, dann benutzt man hier eben das KLibFactory Interface.

    Zusammenfassend:
    In jeder Pluginbibliothek ist eine direkte oder indirekte Klasse von KLibFactory.
    Diese Klasse wird bei init_libname instanziert und zurückgeliefert.
    Das ist dann die Instanz, die bei KLibLoader::factory() als Returnwert kommt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #24
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Oooohhhhhhhh, dann habe ich hier einiges missverstanden!
    Ich bin immer davon ausgegangen, das die Factory so eine Art Plugin-aufrufende Klasse sei und diese somit nur einmal vorhanden sein muß!

    Danke nochmals!!!
    Bodo
    Systemadmistration UNIX

  10. #25
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von TheDodger
    Oooohhhhhhhh, dann habe ich hier einiges missverstanden!
    Ich bin immer davon ausgegangen, das die Factory so eine Art Plugin-aufrufende Klasse sei und diese somit nur einmal vorhanden sein muß!
    Ansich hast du schon recht.
    Die Factory ist im allgemeine immer die Klasse, die die Plugins erzeugt.
    Tut sie eigentlich auch in diesem Fall, die Plugininstanz wird ja von der Factory erzeugt.

    Man könnte das sicher auch so lösen (wenn man nciht KLibLoader verwendet), dass man eine Factory im Programm hat, die dann den Namen des plugins bekommt und so das extern C Symbol zusammen baut, das dann direkt das Plugin erzeugt.

    Der Nachteil dabei ist, dass man dem Pluginkonstruktor dann keine Parameter übergeben kann und man immer nur ein Plugin pro lib haben kann, oder man für jedes Plugin in der lib eine dlsym machen muß.
    (Außerdem muß die Factory dann rigendwie wissen, ob sie für eine Anfrage iene neu Lib laden muß, oder ab es mit der schon geladenen auch geht)

    So gesehen ist der Ansatz der kdelib hier mit einer zweistufigen Factory flexibler, aber auch ein bischen verwirrender.
    Die erste Factory ist KLIbLoader, die zweite Factory ist dann die KLibFactory Subklasse.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #26
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Bin grad dabei den code umzustricken ...
    Bodo
    Systemadmistration UNIX

  12. #27
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Hmm ... irgendwie funktioniert das wohl doch nicht mit qmake ...
    Ich kann über qmake static & shared libs erzeugen. Klappt auch wunderbar.
    Dabei kommen dann lib mit *.so oder *.a Endung heraus.
    Der KLibLoader will aber libs mit der Endung *.la haben.
    Wenn ich meine *.a jetzt nach *.la umbenenne, habe ich einen crash.

    Aber bis dahin bin ich nun schonmal gekommen
    Bodo
    Systemadmistration UNIX

  13. #28
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, vielleicht gibt es da noch einen Lib typ.
    Oder man braucht spezielle Flags, um aus einem .so oder .a ein .la zu machen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #29
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    18.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Hmm ... ich habe nicht's weiter gefunden, als staticlib (*.a) sharedlib( *.so) plugin(*.so)
    Was anderes bietet mir qmake nicht.

    Jedenfalls steigt er hier aus:

    factory = KLibLoader::self()->factory( svcptr->library() );

    Ich habe in den Konstruktor meiner Factory ein qDebug eingebaut, aber das wird schon nicht mehr ausgeführt.

    *grummel*

    Ich bin sooo dicht dran ...
    Bodo
    Systemadmistration UNIX

  15. #30
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich hab jetzt was rausgefunden

    Die Plugins sind .so Files.
    Die .la Files sind nut Textdateien, eine Art Beschreibungdatei.

    Schau dir mal eine auf deinem System an.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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