Das xtree-Widget-Set erweitert die Qt Model- und Viewklassen mit Hilfe der znode<T>-lib, um die Entwicklung von XML-basierten Anwendungen zu vereinfachen.
Der XML Datenbaum wird dabei auf eine Excel-artige Tabellenstruktur abgebildet (‚gemappt‘). Das mapping wird ebenfalls in XML ausgedrückt. Aus einem XML-Knoten wird eine Zeile in der Tabelle (‚Item-View‘) erzeugt, jedes XML-Attribut kann als ein Feld (‚Item‘) dargestellt werden.
Beispiel: Photovoltaik
XML-Daten: (siehe xml/modeldata1.xtr)
<Panel PanelID="JA 01" PanelName="JA Solar T62B" WattPeak=”440” MaxVolt=”1200” … /> <Panel PanelID="JA 02" PanelName="JA Solar X58C" WattPeak=”630” MaxVolt=”1600” … />
Mapping-Descriptor: (siehe xml/modelsheets.xml)
<Section ContentType="Inverter" > <ModelSheet> <InverterID ItemType="PlainType" /> <InverterName ItemType="PlainType" /> <Manufacturer ItemType="PlainType" /> <MaxPowerInput ItemType="ChoiceType" FixedChoices="2000|4000|6000|8000" UnitType="W"/> <MaxPowerOutput ItemType="ValueType" UnitType="W"/> <NumStrings ItemType="IntValueType" /> <Weight ItemType="ValueType" UnitType="kg"/> </ModelSheet> </Section>
Auch die Darstellungseigenschaften der Datenfelder werden über XML konfiguert. Dazu wird jedem Feld ein ‚ItemType‘ zugewiesen, der die Eigenschaften des Feldes definiert. Dies dient auch der Datensparsamkeit (‚flyweight-pattern‘): Das Icon eines Feldes muss ja nur einmal gespeichert werden.
<ItemTypes> <TreeSectionType RenderStyle="PlainStyle" EditorType="LineEditType" ItemFlags="IsUserCheckable|IsEnabled" Icon="DesktopIcon"/> <HeaderType RenderStyle="HeaderStyle" EditorType="LineEditType" ItemFlags="IsEnabled"/> <PlainType RenderStyle="PlainStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable"/> <ValueType RenderStyle="FormattedStyle" EditorType="LineEditType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="Coulomb"/> <ChoiceType RenderStyle="ComboBoxStyle" EditorType="ComboBoxType" ItemFlags="IsEnabled|IsEditable|IsSelectable" UnitType="W" FixedChoices="2000|4000|6000|8000" /> </ItemTypes>
In der Demo-Applikation sind die Views noch in umschaltbare sections unterteilt, die einzelnen Einträge (Hier: Baugruppen fiktiver PV-Anlagen) können noch Kindelemente (Hier: technische Dokumente). Die Projektview ‚HA02‘ ist experimentell als QQuickWidget mit einer QML TreeView implementiert.
- Techstack: c++ / Qt6
- Quellcode: gitea.sourceworx.org/chris/xtree