QT Newbie -->Projektansatz Gebäudesteuerung

Alles rund um die Programmierung mit Qt
Antworten
muhQ
Beiträge: 4
Registriert: 14. Juni 2008 17:16

QT Newbie -->Projektansatz Gebäudesteuerung

Beitrag von muhQ »

Ich bin gerade dabei mich in Qt (4.2.1 open src) mit Visual Studio 2008 einzuarbeiten, da ich hiermit gerne ein

Projekt (FH Semesterarbeit) realisieren würde.

Projektbeschreibung:

Visualisierung einer Gebäudesteuerung

- mehrere Gebäude
- viele Zimmer
- jeweils AKtoren / Sensoren (Lüftung, Thermometer, etc.)

Idee / Ansatz

UML: (pdf mit Übersicht siehe Anhang)
Nur bin ich mir hier unsicher, ob ich ein "Model
based TreeView" verwenden sollte, um die Daten auf das
aktuelle View zu bringen, oder es doch selbst programmiere,
da ich hierbei nur diejenigen daten aktualisieren würde,
welche gerade angezeigt werden

Layout Oberfläche: ( GUI als jpg siehe Anhang)
Innerhalb der Treeview werden die Häuser mit Zimmern
aufgelistet, beim click auf ein Zimmer werden die Sensoren /
Aktoren nach Art geordnet auf einem Stack widget dargestellt

Problem:
- Verwendung eines Models oder doch lieber die TreeView
selbst aus den Daten aufbauen?

- Aktualisierung der Daten / View: Es steht ein http server zur
verfügung, an welchen die Sensoren / Aktoren angeschlossen
sind. -> 2 Threads, einer refresh Daten, der andere refresh
View?
Oder doch lieber so ein ModelBasedTreeView verwenden,
werden hier alle Daten aktualisiert? unnötig?
Ausserdem muss beim click auf den aktuellen Status eines
Aktors / Sensors dieser verändert werden können, also 2
wege Datenkommunikation

Hoffe ich konnte es ein bisschen verdeutlichen was ich vorhabe und hoffe auf Anregungen :)

Vielen Dank schonmal
Dateianhänge
UML_MainWindow.rar
UML als pdf
Layout GUI als jpg
(57.98 KiB) 180-mal heruntergeladen
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Also, wenn ich dich richtig verstanden habe bist du dir unsicher ob du QTreeWidget (und QTreeWidgetItem) oder QTreeView mit einem eigenen Model verwenden sollst?
Im Prinzip musst du das entscheiden. QTreeWidget ist einfacher, dafür ist ein Model flexibler. so kannst du zB bei einem Model eigene ItemRoles definieren. Diese sind fest vorgegeben. Les dir in der Doku dazu mal Model/View Programming durch.

Nun zur aktualisierung. Die Daten würde ich in einem extra Thread aktualisieren der ein signal zum GUI-Thread schickt sobald neue Daten verfügbar sind. Die aktualisierung des Views(Widgets) kannst du nur im GUI-Thread vornehmen.

Und jetzt noch eine Frage. Wie willst du die Sensorsignale per http in 2 richtungen übertragen? oder hast du eine kleine tcp(udp)-serveranwendung selbst geschrieben, die tcp(udp)-daten versendet und empfängt?
muhQ
Beiträge: 4
Registriert: 14. Juni 2008 17:16

Beitrag von muhQ »

Vielen Dank schonmal für die schnelle Antwort.

zu der TreeView: Ist es eigentlich möglich nur die Items der untersten Ebene editierbar zu machen?

ALso der http Server empfängt Steuerungssignale, über welche die Aktoren gesetzt werden, ausserdem gibt er per Anfrage Statusdaten der jeweiligen Sensoren / Aktoren zurück,hab ich schon implementiert
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

ModelBasedTreeView verwenden,
werden hier alle Daten aktualisiert? unnötig?
Der vorteil vom Model-View system ist, wenn mans richtig macht, holt sich das view wirklich nur die daten die es braucht .... und die sich geaendert haben. (also vorsicht mit dem reset() )

Bei simplen View ist man mit nem itemview sicher schneller, aber bei komplizierteren sachen nimmt einem das modelview schon ne menge arbeit ab .... dafuer muss man halt klein wenig mehr aufwand investieren, z.b. Aenderungen im model auch immer melden, damit der view bei bedarf anktualisieren kann ....
Das ganze geht bei der QT soweiso ueber slots, so dass man die anderen am model aus nem WOrkerthread aus machen kann ... und sich um den threadwechsel ned selber kuemmern muss.

nochmal entkoppeln muesste man nur, wenn die verarbeitung der daten im modell zu lange dauern wuerde fuer den lieferthread ... was aber bei http abfragen sicher ned der fall ist ....


Ciao ...
Antworten