[gelöst] Fenster mit Plugin erweitern/modifizieren

Alles rund um die Programmierung mit Qt
Antworten
Singesang
Beiträge: 6
Registriert: 18. Februar 2009 13:03

[gelöst] Fenster mit Plugin erweitern/modifizieren

Beitrag von Singesang »

Hallo :D

ich schreibe eine Anwendung, welche durch Plugins erweitert werden soll.
  • Dazu kann sich entweder die Anwendung aus dem Plugin die neuen Widgets holen und einfügen, sodass die Anwendung quasi die Kontrolle hat, welche Änderungen gemacht werden dürfen
ODER
  • ich übergebe irgendwie dem Plugin irgendwie n Handler (ich hoffe das ist der richtige Begriff) auf die Hauptanwendung (this->ui ist das in diesem Fall) sodass das Plugin selbst machen kann, was es will.
Ich würde der Sauberkeit wegen eher zur ersten Option tendieren, da man so später Slots für Plugins definieren kann, welche je nach Funktionalität von den einzelnen Plugins belegt werden können (um zu vermeiden, dass z.B. zwei Plugins geladen werden, welche dasselbe Aufgabengebiet abdecken).

Mein Problem ist nun die Umsetzung. Ich habe leider keine Ahnung, wie ich eine der beiden Optionen umsetzen kann, da es in keinem Fall - mangels Ahnung - funktioniert hat. Demnach wäre ich über jeden hilfreichen Tipp erfreut. :)

mfg Singesang

Edit:

tabWidget->addWidget(this) hat geholfen.
Zuletzt geändert von Singesang am 18. April 2010 15:02, insgesamt 1-mal geändert.
Chris81T
Beiträge: 82
Registriert: 4. Mai 2008 00:06
Wohnort: Urbar

Beitrag von Chris81T »

Hallo,

ich denke, dass Plug & Paint Example ist für dich recht interessant. Es macht dir vor, wie du "Plugins" / Libraries verwenden kannst.
Singesang
Beiträge: 6
Registriert: 18. Februar 2009 13:03

Beitrag von Singesang »

Ich habe schon eine funktionstüchtige Anwendung geschrieben, welche mir die Plugins lädt und initialisiert:
Um dem QTabWidget tabWidget etwas hinzuzufügen, gehe ich gerade folgenden Weg: In Zeile 65 in src/base/widget.cpp rufe ich die Funktion initialize(QTabWidget *) auf. Somit übergebe ich dem Plugin quasi einen Handler auf das QTabWidget, sodass das Plugin dann QTabWidget::addTab(...) aufrufen kann. Dies entspricht dem zweiten Weg den ich oben angesprochen habe, welchen ich jedoch nicht beschreiten wollte. (siehe Anhang overcraft.tar.gz). Des weiteren füge ich nicht das Widget aus dem Plugin hinzu, sondern hole mir einen Tab aus dem QTabWidget des Plugins und füge diesen dem QTabWidget der Anwendung hinzu (src/plugins/widgettime/widgettime.h Zeile 31).

Ich glaube ich habe aber die Frage falsch formuliert. Sie sollte eher lauten:

Wie füge ich ein komplettes Widget aus einer .ui-Datei in ein QTabWidget ein? Es geht darum, dass ich die komplette Ui::WidgetTime aus einer anderen .ui-Datei (hier: src/plugins/widgettime/widgettime.ui) als Tab hinzufügen will.
Dateianhänge
overcraft.tar
(30 KiB) 117-mal heruntergeladen
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Bei Plugins solltest du Dir vorher erst mal richtig klar sein, was Du willst.

Hab mir dein Beispiel ned angeguckt, aber scheinbar Exportierst du ueber Deine Pluginschnittstelle QT Klassen ? richtig ?

Dann solltest Du dir aber auch ueber die konsequenzen bewusst sein (QT versions und compile abhaengigkeit).

Weiterhin, welchses level, welche ausbaustufe von Plugins brauchst du ?
- fast-Plugins - einfach das vorhandensein einer Dll schaltet funktionalitaet ein
- vollstaendige Plugins - eine Aufgabe / Funktion kann von mehreren plugins (parrallel installiert) geloest werden, und der user soll auswaehlen welches. ergo du brauchst ne richtige Pluginverwaltung.

Beispiele:

gimp, plugins durch scripte, sind vollwertige plugins z.b.

Mediaplayer, codecs, wo geschaut wird ob zum decodieren eine bestimmte dll vorliegt, sind eher "fast" plugins.

Dementsprechend solltest du deine Pluginschnittstelle hochziehen.

nen fast plugin mit QT schnittstelle, nagelt die App auf die eine dll fest, und du brauchst soweiso kontrolle ueber beide komponenten, da du qt abhaengigkeiten in der Schnittstelle hasst. Das heisst eine erweiterung der App unabhaengig von Dir (also ohne deinem wissen und zustimmung) iss ned möglich. Und bei jeder neuen version musst du App und Plugin neu kompilieren, dafuer sparst dir aber ne Menge PluginOverhead.
WIe gesagt, du solltest Dir nur der konsequenzen bewusst sein!

Ciao ....
Singesang
Beiträge: 6
Registriert: 18. Februar 2009 13:03

Beitrag von Singesang »

Hab mir dein Beispiel ned angeguckt, aber scheinbar Exportierst du ueber Deine Pluginschnittstelle QT Klassen ? richtig ?
Ja, ich vermute dass ich das so gemacht habe :lol: interface hauptanwendung.cpp hauptanwendung.h
Ich habe halt das EchoPluginExample erweitert um ein bisschen zu lernen und habe aus diesem Wissen diese Anwendung geschrieben.

Ich dachte an diese "vollständige Plugins" inklusive der Implementation einer Verwaltung für diese (über ein Backend o.ä.), denn bei meiner Anwendung handelt es sich um eine Oberfläche für einen Boardcomputer, welcher über ein Touchscreen bedient wird. Würdest du mir da zu etwas anderem raten?

Hier ein Screenshot der alten Fassung der Oberfläche:
Bild
Chris81T
Beiträge: 82
Registriert: 4. Mai 2008 00:06
Wohnort: Urbar

Beitrag von Chris81T »

Offtopic:
Laut dem Screenshot wird da ein cooles Lied angestimmt 8) Gibt es eigentlich wieder was neues vom Rob Dougan?
Singesang
Beiträge: 6
Registriert: 18. Februar 2009 13:03

Beitrag von Singesang »

Ich habe es geschafft:
Ich muss tabWidget->addTab(this) aufrufen.
Danke für die Hinweise :D

@Chris81T: Nicht das ich wüsste. Evtl. könnte dir aber auch Overseer gefallen.
Antworten