User Tools

Site Tools


id_qml_module_dev

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
id_qml_module_dev [2018/02/01 14:01]
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 Visualisierungsoder 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 24: Line 24:
 **Beteiligte Klassen und QML-Files** **Beteiligte Klassen und QML-Files**
  
-Um dieses Modul Konzept zu ermöglichen,​ bedarf es eines dediziertem ​Zusammenspiels aus C++ Klassen und+Um dieses Modul Konzept zu ermöglichen,​ bedarf es eines dedizierten ​Zusammenspiels aus C++ Klassen und
 QML-Dateien,​ welche folgend erläutert werden. Nehmen wir dafür an, wir möchten ein Modul <​module>​ erstellen QML-Dateien,​ welche folgend erläutert werden. Nehmen wir dafür an, wir möchten ein Modul <​module>​ erstellen
 und dem Tool hinzufügen. Da Klassen immer auch header Dateien benötigen, lasse ich in der Beschreibung im und dem Tool hinzufügen. Da Klassen immer auch header Dateien benötigen, lasse ich in der Beschreibung im
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 Sprachendas 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 werdenz.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ückgibtdas 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) {
id_qml_module_dev.1517490080.txt.gz · Last modified: 2018/02/01 14:01 by 5.28.75.162