2010-04-12 15 views
9

Parte della mia applicazione riguarda il rendering delle forme d'onda audio. L'utente sarà in grado di ingrandire/ridurre la forma d'onda. A partire da zoom out, voglio solo campionare l'audio sugli interni necessari per disegnare la forma d'onda alla risoluzione data. Quindi, quando eseguono lo zoom in avanti, ricampionare in modo asincrono i "punti mancanti" e fornire una forma d'onda più chiara. (Pensa a Google Maps.) Non sono sicuro della migliore struttura dati da utilizzare nel mondo Qt. Idealmente, mi piacerebbe archiviare campioni di dati ordinati per tempo, ma con la possibilità di riempire i punti secondo necessità.Quale classe contenitore Qt utilizzare per un elenco ordinato?

Così, per esempio, i punti dati potrebbe inizialmente apparire come:

data[0 ms] = 10 
data[10 ms] = 32 
data[20 ms] = 21 
... 

Ma quando lo zoom avanti, vorrei ottenere più punti, se necessario, forse:

data[0 ms] = 10 
data[2 ms] = 11 
data[4 ms] = 18 
data[6 ms] = 30 
data[10 ms] = 32 
data[20 ms] = 21 
... 

Si noti che la i valori tra parentesi sono valori di ricerca (millisecondi), non indici di array.

Dovrei essere in grado di interrogare in modo efficiente un intervallo ("tutti i punti tra 10 e 30 millisecondi") e inserire in modo un po 'efficiente nuovi punti.

In. Net Potrei aver utilizzato un SortedList<int, int>. Quale sarebbe la migliore classe da usare in Qt? O dovrei usare un container STL?

risposta

10

QMap viene automaticamente ordinato, quindi iterandolo verrà generato un elenco ordinato (crescente).

Fornisce inoltre Qmap :: upperBound() e QMap :: lowerBound() che è possibile utilizzare per la funzionalità di ricerca degli intervalli.

http://doc.qt.io/qt-5/qmap.html

+0

Durante l'iterazione su un QHash, gli articoli sono ordinati in modo arbitrario. Con QMap, gli elementi sono sempre ordinati ** con il tasto **. – Yash

-3

Quale sarebbe la migliore classe da utilizzare in Qt? O dovrei usare un container STL?

È possibile utilizzare la std :: map. Raccomando di utilizzare i contenitori STL per la logica aziendale e i contenitori Qt solo quando è necessario per legare i dati alla GUI.

EDIT: cambiato std :: set a std :: mappa

+11

Non sono d'accordo fortemente con l'utilizzo di STL su QT. Usando STL perderai alcune funzionalità QT davvero belle come le copie poco profonde. E poi dovrai convertire in oggetti QT per passare i dati alla GUI, e questo può causare copie profonde. E (secondo gli sviluppatori di Qt) STL non è ancora compatibile al 100% su tutte le piattaforme supportate da Qt. –

3

vorrei caldamente consigliare di dare un'occhiata qui: Generic Containers

troverete una buona sintesi delle diverse classi container in Qt. .. ti consiglierei anche di usare uno di quelli! Mi sembra che potresti usare una QMap!

Spero che aiuti un po '!

Problemi correlati