Anzeige:
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 31 bis 45 von 55

Thema: Tutorial zu KParts?

  1. #31
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von anda_skoa
    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.
    Richtig, danke für den Tip!

    Die *.la Dateien werden von einem schript names ltmain.sh erzeugt ... ich versuche das mal mit Hand nachzuvollziehen ...
    Bodo
    Systemadmistration UNIX

  2. #32
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Ich habe gerade eben 2 Stunden vergeblich versucht, mein Projekt in KDevelop zu übernehmen ... ich wusste schon, weshalb ich das nicht nehmen wollte ... :-(

    Ich habe mir jetzt von Hand eine *.la Datei erzeugt und schon stürtzt das Programm erstmal nicht ab dafür landet er woanders ...

    Code:
     if( factory == 0L ) {
    		
             kdDebug( ) << "Could not create a factory for KTrader's offer!" << endl;
             part = 0L;
     }
    Bodo
    Systemadmistration UNIX

  3. #33
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich benutze KDevelop auch nur zum Programmieren und zum Generieren des Grundframeworks.
    Ab dann mache ich das Ändern der Makefile.am, etc händisch.

    Im kdesdk Paket gibt es auch eine autocont/-make framework, das sogenannte kapptemplate.

    Aber ich hatte auch mit dem von KDevelop noch nie Schwierigkeiten.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #34
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Nun, mein Projekt ist mittlerweile etwas umfangreich geworden.
    Eigene Designer Widgets, eigene Projektlib, das Projekt an sich und jetzt noch die Parts.
    ich bekam meine Schwierigkeiten, da mir KDevelop nicht alles in ein einziges Projekt packen konnte.
    Beim einbinden der Designer Widgets hab ich es nicht hinbekommen, das er mir eine *.so Biblothek erzeugt und diese auch an die richtige Stelle kopiert. Und da habe ich ständig in den Makefile.am rumgefummelt. Sobald ich aber ein automake/autoconf aufgerufen hatte, das KDevelop mit da seine Vorgaben wieder mit untergejubelt. Meine Einträge waren zwar noch da, doch beim anschließenden configure bekam ich dann die ersten Fehler.

    Beim erzeugen meiner Projekt-Lib ein ähnliches Problem ... keine shared Lib ...

    Beim Projekt hab ich dann die Schnauze gestrichen voll gehabt und aufgegeben.

    Es ist schon etwas schwieriger, ein bestehendes Projekt komplett in eine IDE reinzuverfrachten. Ich hab's heut nicht geschafft.
    Vielleicht, wenn ich ganz von vorn begonnen hätte ...
    Bodo
    Systemadmistration UNIX

  5. #35
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wenn ich ein externes Prog übernehme, mach ich das immer so:
    KDE Mini Projekt erstellen, so dass Programmname, etc passt.
    Wenn ich Unterverzeichnisse mit libs habe, leg ich die auch an.
    KDevelop generiert für alle Verzeichnisse Makefile.am usw.

    Dann in den Projekt Optionen, das automaitsche Makefilegenerieren abschalten, Projekt schließen.
    Dann make distclean.

    Alle file in die richtigen Verzeichnisse kopieren.
    Die Makefile.am Dateien in allen Verzeichnissen anpassen.
    Meist muß man eh nur die Zeilen für Sources erweitern (ui gelten da auch als source).

    Wenn man dann ohne KDevelop weiterarbeiten will, braucht man nichts mehr zu tun.
    make -f Makefile.dist
    ./configure

    Wenn man mit KDevelop arbeiten will, muß man das Projekt öffnen und im tab Files alle Dateien hinzufügen, die Klassen enthalten, die man im Classbroser haben nöchte.

    Die ersten paar Mal ist das Syntax der Makefile.am noch bischen kompliziert, aber das lernt man schon.
    Wenn man mal nicht weiterkommt, kann man in einem Dummy Projekt die enstprechende Regel von KDevelop generieren lassen und dann nachsehen.

    Kann sein, dass es mit dem kapptemplaet aus kdesdk in weniger Schritten geht, hab ich noch nie probiert.
    Vorallem weil ich auch KDevelop verwenden möchte und dadurch nur einen Nachteil hätte.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #36
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    eine neue Fehlermeldung

    Da sitz ich gestern vor meinem Notebook (SuSE8.0) und bekomme keinerlei Fehlermeldung und heute morgen, gentoo1.4 selber Code dieses hier:
    Code:
    kdecore (KLibLoader): WARNING: library=libjargoadmin: file=/home/dodger/.kde3.1/lib/libjargoadmin.la: /home/dodger/.kde3.1/lib/libjargoadmin.so: undefined symbol: _ZTI9JargoPart
    jargo: Could not create a factory for KTrader's offer! 'libjargoadmin'
    Na bitte, mit sowas kann ich doch was anfangen
    Bodo
    Systemadmistration UNIX

  7. #37
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    never ending story

    *schlonk*
    Soweit klappt alles. Das Plugin wird erkannt und auch korrekt geladen und dargestellt.
    Aber wie kriege ich es jetzt so hin, das ich die Funktionen in den Plugins nutzen kann?

    Alles Plugins basieren auf eine Klasse JargoPlugin. Alle sollen davon abgeleitet werden.
    In meinem Pluginloader läd diese Funktion mein Plugin:
    Code:
    factory = KLibLoader::self()->factory( ((ModulItem*)lastItem)->library );
    
    if( factory == 0L ) {
    		
             kdDebug( ) << "Could not create a factory for KTrader's offer!" << endl;
             part = 0L;
    } else {
    		
             factory->setName( "JargoFactory" );
                
    	 KParts::Factory* fac = static_cast<KParts::Factory*>( factory );
                
             part = static_cast<JargoPart*>( fac->createPart( workSpace, 0, this ) );
    part wurde im Headerfile als 'JargoPart* part' angelegt.

    JargoPart besitzt eine virtuelle void Function names dump(), welche eigentlich nur, mittels qDebug(), etwas ausgeben soll.
    Diese Funktion ist im Plugin komplett ausgecodet.

    Wenn ich jetzt die Funktion mit

    part->dump();

    aufrufe stürtzt der ganze Kram ab

    Ich denke mal, das der Aufruf der Funktion gar nicht richtig sein kann, aber wie dann richtig?
    Bodo
    Systemadmistration UNIX

  8. #38
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, sieht für mich richtig aus.

    JargoPart ist JargoPlugin von weiter oben?

    Kannst du in deiner Factory einen Debug output machen?
    Vielleicht klappt was bei der Erzeugung nicht.

    Oder du gibts im Part Konstruktor den Wert von this aus und im Programm den Wert von part und vergleichst dann.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #39
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von anda_skoa
    Hmm, sieht für mich richtig aus.

    JargoPart ist JargoPlugin von weiter oben?
    Nicht ganz.

    Ungefähr so aufgebaut.
    Jargo == Application
    JargoPart == allgem. Part

    Jargo<Name>Part == PluginPart
    Jargo<Name>Factory == PluginFactory

    Jargo<Name>Part wird abgeleitet von JargoPart.
    Und die Jargo<Name>Factory direkt von der KLibFactory.


    Kannst du in deiner Factory einen Debug output machen?
    Die Factory wird korrekt erzeugt, aber die dump() Funktion dort wird nicht aufgerufen.
    Muß ich diese auch public static machen wie aboutData()?
    ... selbst dann klappt's nicht.


    Oder du gibts im Part Konstruktor den Wert von this aus und im Programm den Wert von part und vergleichst dann.
    Code:
    Debug   : Jargo::createJargoPlugin( QListViewItem* item )
    Requesting factory for service Jargo/Part
    Debug   : JargoAdminFactory::JargoAdminFactory()
    Got factory (0x811afb0). Creating KPart...
    Debug   : JargoAdminFactory::create
    Debug   : JargoPart::JargoPart
    Debug   : -> 'workSpace'
    Debug   : AdminPart::AdminPart
    Debug   : -> 'workSpace'
    Debug   : JargoAdminFactory::instance()
    Debug   : JargoAdminFactory::aboutData()
    Debug   : Jargo::slotNewRecord()
    nach slotNewRecord() müsste mein dump() kommen ...

    Also irgendwie kommt der mit dem 'JargoPart* part' nicht so klar
    Bodo
    Systemadmistration UNIX

  10. #40
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Nachdem ich _jede_ Funktion mit qDebug()'s gespickt habe (wat für 'ne Arbeit) bin ich fast draufgekommen.
    In der loadPlugin() Funktion, die mir meine Plugins erzeugt, stand nodh 'JargoPart* part = 0;'
    Na toll ... scheiß Fehler!
    Nach 'part = 0;' geändert und schwupps .. klappt es.

    Aber ich denke, es ist nicht die letzte Frage zu diesem Thema ...
    Bodo
    Systemadmistration UNIX

  11. #41
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    So eine lokale Deklaration hab ich auch mal gehabt.
    Fand ich damals selber nicht, das hat erst ein anderer rausgefunden.

    Fein, dass es jetzt klappt

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #42
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Find ich auch!

    Derzeit arbeite ich am löschen eines einzelnen Parts ... Der Part wird auch schon gelöscht, aber mit der Factory gibt es noch kleinere Probleme
    Bodo
    Systemadmistration UNIX

  13. #43
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Vielleicht hilft ein KLibray::unload()

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #44
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Ja, denn hier wird zumindest der Destruktor aufgerufen.
    Allerdings klappt ein erneutes Aufrufen nicht mehr ganz. Die Konstruktoren werden zwar aufgerufen, aber mein CustomWidget wird nicht mehr dargestellt ...
    Bodo
    Systemadmistration UNIX

  15. #45
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wenn du unload machst, mußt du die lib neu laden.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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