This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
id_qml_module_dev [2018/02/01 14:02] 5.28.75.162 |
id_qml_module_dev [2018/02/07 02:56] (current) 92.78.28.39 |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| Unser Tool ist frontendseitig modular aufgebaut (verschiedene Viewer). | Unser Tool ist frontendseitig modular aufgebaut (verschiedene Viewer). | ||
| - | Jedes Modul löst ein Visualisierungs oder Analyseproblem | + | Jedes Modul löst ein Visualisierungs- oder Analyseproblem |
| - | odr ermöglicht die Bearbeitung von Datenmanipulationen etc. | + | oder ermöglicht die Bearbeitung von Datenmanipulationen etc. |
| Solche Module sind beispielsweise der "TableViewer", der "PlotViewer", etc. | Solche Module sind beispielsweise der "TableViewer", der "PlotViewer", etc. | ||
| Dadurch ist es möglich unterschiedliche Modulkombinationen dem Kunden anbieten zu können. | Dadurch ist es möglich unterschiedliche Modulkombinationen dem Kunden anbieten zu können. | ||
| Line 47: | Line 47: | ||
| Die Klassen/QML welche <module> beinhalten, sind neu zu erstellen und implementieren die Funktionalität unseres Modules. | Die Klassen/QML welche <module> beinhalten, sind neu zu erstellen und implementieren die Funktionalität unseres Modules. | ||
| - | Alle anderen genannten Daten sind bereits vorhanden, und von diesen wird im Weiteren entweder einfach abgeleitet, | + | Alle anderen genannten beteiligten Dateien sind bereits vorhanden, und von diesen wird im Weiteren entweder einfach abgeleitet, |
| oder es gibt notwendige Anpassungen in diesen Dateien, wie folgt detailiert erläutert | oder es gibt notwendige Anpassungen in diesen Dateien, wie folgt detailiert erläutert | ||
| Line 53: | Line 53: | ||
| ---- | ---- | ||
| - | **Detailierte Beschreibung des Zusammenspiels zuvor genannter Daten um ein neues Modul dem Tool hinzuzufügen** | + | **Detailierte Beschreibung des Zusammenspiels zuvor genannter Dateien, um ein neues Modul dem Tool hinzuzufügen** |
| Line 64: | Line 64: | ||
| - | * ContainerUI.cpp ist eine Klasse welche verwendet wird um alle Module zu managen, und zu verwalten (auch die internationalisierung der Sprachen und das Laden von Daten ist hier implmentiert.) | + | * ContainerUI.cpp ist eine Klasse welche verwendet wird um alle Module zu managen, und zu verwalten (auch die Internationalisierung der Sprachen, das Laden von Daten, und die Lizenzverwaltung ist hier implementiert.) |
| Line 80: | Line 80: | ||
| registrieren durch den aufruf von "ContainerUI::registryModule(this)". Dadurch wird das Modul in der | registrieren durch den aufruf von "ContainerUI::registryModule(this)". Dadurch wird das Modul in der | ||
| Modulliste von ContainerUI per Zeiger hinterlegt. Zudem muss das Modul im Konstructor noch benannt werden, | Modulliste von ContainerUI per Zeiger hinterlegt. Zudem muss das Modul im Konstructor noch benannt werden, | ||
| - | durch this->mStringTypeName="Module Viewer >";. Nun ist noch die geerbte Mehtode "updateModule()" | + | durch this->mStringTypeName="Module Viewer >";. Nun ist noch die geerbte Methode "updateModule()" |
| - | zu implementieren. | + | zu implementieren. Sie wird aktuell immer dann für jedes Modul aufgerufen, wenn ein Datensatz geladen wird, |
| + | um entsprechende Initialisierung der Modules mit den neuen Daten "on demand" zu ermöglichen. | ||
| | | ||
| + | {OffTopic: Wie dem auch sei, die "updateModule()" Methode aller (!) Module kann seitens aus QML bei Bedarf | ||
| + | immer mit "containerUI.updateAllModules();" ausgelöst werden. Aber bitte beachten: Das ist eine globale | ||
| + | Operation auf alle Module, und man muss schon genau schauen welche unerwünschten Effekte bei den anderen | ||
| + | Modulen dadurch eventuell auftreten können.} | ||
| | | ||
| * GuiState.cpp verwaltet den Zustand des Tools. | * GuiState.cpp verwaltet den Zustand des Tools. | ||
| Line 102: | Line 107: | ||
| property int thisIntQML_Modules_Visible_Variable : 0 | property int thisIntQML_Modules_Visible_Variable : 0 | ||
| property int thisIntQML_Module_Index_Variable : -1 | property int thisIntQML_Module_Index_Variable : -1 | ||
| + | property int just_a_VariableForImplementationReasons: 0 | ||
| + | |||
| + | |||
| Connections { | Connections { | ||
| target: appWindow | target: appWindow | ||
| Line 112: | Line 120: | ||
| } | } | ||
| - | Dadurch wird das Modul mit dem Reiter-Button system verbunden, welches einen button erzeugt um das Modul | + | Dadurch wird das Modul mit dem Reiter-Button System verbunden, welches einen Button erzeugt um das Modul |
| sichtbar werden zu lassen im Tool. | sichtbar werden zu lassen im Tool. | ||
| - | Zudem muss das modul min einmal in seiner qml instanziiert werden z.B. durch "<module>{}" damit einmal der | + | Zudem muss das Modul min einmal in seiner qml instanziiert werden, z.B. durch "<module>{}" damit einmal der |
| Konstruktor aufgerufen wird und das Modul so registriert ist. | Konstruktor aufgerufen wird und das Modul so registriert ist. | ||
| Line 125: | Line 133: | ||
| QML_For_Module_<module>{ | QML_For_Module_<module>{ | ||
| id: qmlModule<module>Viewer | id: qmlModule<module>Viewer | ||
| + | objectName: "qmlModule<module>ViewerObject" | ||
| z: 200 | z: 200 | ||
| visible: false; | visible: false; | ||
| thisIntQML_Modules_Visible_Variable : intQML_Modules_Visible_Variable | thisIntQML_Modules_Visible_Variable : intQML_Modules_Visible_Variable | ||
| thisIntQML_Module_Index_Variable : containerUI.getModuleIndex("Module Viewer >"); | thisIntQML_Module_Index_Variable : containerUI.getModuleIndex("Module Viewer >"); | ||
| + | just_a_VariableForImplementationReasons : containerUI.set_QML_ObjectName_String_from_Instance("qmlModule<module>ViewerObject", | ||
| + | containerUI.getModuleIndex("Module Viewer >")); | ||
| + | | ||
| } | } | ||
| Dadurch wird das Modul zur Laufzeit erstellt und kann im Tool genutzt werden. Bitte darauf achten das | Dadurch wird das Modul zur Laufzeit erstellt und kann im Tool genutzt werden. Bitte darauf achten das | ||
| - | der String "Module Viewer >" exakt der gleiche ist, wie er im Konstructor von <module>.cpp bei | + | der String "Module Viewer >" (bei 'thisIntQML_Module_Index_Variable') exakt der Gleiche ist, |
| - | this->mStringTypeName genannt wurde (sonst funktioniert es nicht). | + | wie er im Konstructor von <module>.cpp von Euch bei |
| + | this->mStringTypeName genannt wurde (sonst funktioniert es nicht). | ||
| + | Bitte bei 'just_a_VariableForImplementationReasons' weiter darauf achten, dass der erste String im Funktionsaufruf | ||
| + | mit "qmlModule<module>ViewerObject" genau die Bezeichnung des 'objectName' dieses qml-Modules ist, und auch | ||
| + | hier der zweite String mit "Module Viewer >" wieder exakt der Gleiche ist, wie er im Konstructor von <module>.cpp | ||
| + | von Euch bei this->mStringTypeName genannt wurde. Auch hier: wenn es nicht exakt so ist, funktioniert das | ||
| + | Modul, dessen Einbindung, ja noch nichteinmal dessen Lizenzierungsprozess innerhalb des Tools leider nicht. | ||
| + | Also unbedingt auf Genauigkeit und Gründlichkeit achten, and dieser sehr neuralgischen Stelle. | ||
| Nun ist das Modul angemeldet, eingebunden und kann genutzt werden. Wann immer Module aktualisiert werden | Nun ist das Modul angemeldet, eingebunden und kann genutzt werden. Wann immer Module aktualisiert werden | ||
| Line 148: | Line 167: | ||
| Hinweis: Hin und wieder kann es notwendig sein von qml Objkten bestimmte Eigenschaften aud dem c++ code selbst | Hinweis: Hin und wieder kann es notwendig sein von qml Objkten bestimmte Eigenschaften aud dem c++ code selbst | ||
| - | heraus zu setzen, anstatt über die qml Files selbser. Dafür gib es GuiState die Klassenfunktion | + | heraus zu setzen, anstatt über die qml Files selber. Dafür gib es in GuiState die Klassenfunktion |
| - | "Object Object= static QObject * m_getQMLObjectAsQObject(QString QML_Object_String);" welche das | + | "Object QML_Object= static QObject * m_getQMLObjectAsQObject(QString QML_Object_String);" welche das |
| - | QObject aus dem qml zurückgibt, das als Objektname 'objectName: "QML_Object_String" ' besitzt. | + | QObject aus dem qml zurückgibt das als Objektname 'objectName: "QML_Object_String" ' besitzt. |
| - | Die Eigenschaften können dann leicht wie folgt gesetzt werden: | + | Die Eigenschaften können dann leicht - beispielsweise wie folgt - gesetzt werden: |
| | | ||
| if(QML_Object) { | if(QML_Object) { | ||