Utilizzo una QTableView con una sottoclasse di QItemDelegate per controllare l'aspetto delle celle di Tableview.Aggiornamento efficiente di una QTableView ad alta velocità
Ogni cella visualizza il nome e lo stato di un dispositivo collegato esternamente e possono essere collegati contemporaneamente fino a 100 dispositivi.
Il nome e il tipo di ogni dispositivo è essenzialmente statico, con un aggiornamento molto raro (forse una volta all'ora), ma ogni cella deve visualizzare un valore in tempo reale dell'input del dispositivo, che attualmente prelevo ogni 50 millisecondi. Questo valore viene visualizzato come un grafico a barre di base disegnato dal pittore fornito al metodo Delegate :: paint() dal TableView.
Il problema con l'aggiornamento del mio modello 20 volte al secondo è che l'intera tabella viene ridisegnata ogni volta, il che è altamente inefficiente. Limitare il metodo paint al solo disegno del grafico a barre mostra che la maggior parte del tempo di CPU è dedicato a disegnare il nome, lo stato e l'immagine associata su ogni cella, piuttosto che il grafico.
Quello che devo trovare è un modo per aggiornare il grafico per ogni cella regolarmente senza ridisegnare la cella, ma non riesco a capire come farlo.
Qual è il modo più efficiente per raggiungere questo obiettivo?
Modifica: immagine allegata per aiutare.
L'immagine rappresenta 10 sensori in un QTableView. Il numero, il nome e lo stato sono praticamente statici, quasi mai in fase di aggiornamento. Il grafico a barre accanto al testo "Valore sensore" viene aggiornato ogni 50 ms. Voglio solo dipingere questa barra, piuttosto che il testo, lo stato e lo sfondo della cella. Le spie di stato e lo sfondo sono immagini complesse, quindi è necessario molto più tempo della CPU rispetto al semplice disegno e riempimento di un rect.
Lo stato deve essere nello stesso widget di tutto il resto? Il mio primo pensiero sarebbe quello di incollare un ListView dallo stesso modello accanto ad esso. –
Sì, purtroppo lo fa. Ogni dispositivo ha un numero di parametri che devono essere accanto al grafico.Ho pensato di avere due punti di vista, forse sovrapposti, ma mi sembra un modo molto disordinato per ottenere ciò che voglio, e rende più difficile cambiare modelli, editing e così via. – Dani