Seite 1 von 1

häufiges update in item model mit vielen daten

Verfasst: 2. März 2010 16:47
von Calvin-gr
Hallo,

in einer simulationssoftware habe ich ein qtreeview mit selbst geschriebenem model, das unter umständen relativ viele daten enthalten kann (das ganze sieht ungefähr so aus wie der "property editor" im qt designer).
bei laufender simulation ändern sich die angezeigten daten sehr häufig, allerdings nur in einer von zwei spalten. wie teile ich dem view am elegantesten und schnellsten mit, dass sich die daten geändert haben? die anzeige sollte mehrmals pro sekunde aktualisiert werden, so dass es für den benutzer flüssig aussieht.
mein erster ansatz wäre, einfach dataChanged() für alle items im model aufzurufen, also mit dem ersten und dem letzten item als argument. ich fände es allerdings eleganter, wenn ich nur diejenigen items behandeln könnte, die der nutzer tatsächlich sieht. da die daten baumförmig angeordnet sind, sind viele items wahrscheinlich häufig nicht sichtbar.

Vielen Dank,

Calving-gr

Verfasst: 2. März 2010 17:01
von RHBaum
Wir haben aehnliche "Probleme" hier ...

Unsere Loesung fuer das Model:

Das model haelt seine struktur und zusaetzlich ein bool als Dirty flag.

wenn ich daten ins model schreibe (veraendere) setz ich das Dirty flag auf true

Im (einstellbaren) intervall geht nun ne methode (über timer getriggert) drueber und checkt ueberall das dirty flag. iss das gesetzt, schiesst er nen datachanged raus.

liesst er die daten ausm model (data methode) setz ich das dirty flag wieder zurueck ...

die Flags und daten sind natuerlich ueber nen Mutex geschuetzt (einen pro model)

Das funktioniert naja leidlich ^^
wir haben hier daten im bereich von 50 000 Zeilen, mit 3 fixen und 5 variablen(Daten) spalten.
Dazu bekomm ich "Nachrichten" so ca 16 000 pro sekunde, die jeweils die datenspalte in einer zeile aendern.
durch das model iss es fuer die performance ned mehr wichtig obs 10 oder 100000 zeilen sind.
Das befuellen des modells (nachrichten verarbeite) geschieht im wesentlichen in nem anderen thread. der erzeugt kaum last.

Nur beim Anzeigen/aktualisen im vollbild kommt er bissi an die grenzen.
bei ca 80 zeilen und allen sichtbaren spalten, komm ich mit dem update intervall auf ca 100ms runter ... das generiert mir ne Last auf einem core von ca 85% .... unter 100 ms wird die ui dann recht zaeh ....
bei 500 ms bin ich dann auf ca 8% Last ...
iss der view ned sichtbar, iss die last bei fast 0% klar, trotz das das "model arbeitet"

Ciao ...

Verfasst: 7. März 2010 12:19
von Calvin-gr
vielen dank für deine antwort.

ich hab das problem jetzt so gelöst, dass ich eine liste halte mit allen items, die periodisch aktualisiert werden sollen. diese liste aktualisiere ich immer dann, wenn ich items ins model einfüge/entferne, was relativ selten geschieht.