2011-09-05 11 views
7

ho questoCreazione di un QList da una matrice pianura

Struct values[] = { 
    { a, b }, 
    { c, d } 
}; 

e voglio solo creare un QList fuori di esso

QList<Struct> ql(values + 0, values + 2); 

Ma per qualche ragione, QList non ha costruttore adatto e apparentemente nessuna funzione insert adatta. Come funziona? Sono a Qt4.6.

risposta

13

Una soluzione sarebbe quella di creare prima un std::list e poi convertire in un QList:

QList<Struct> ql = 
    QList<Struct>::fromStdList(std::list<Struct>(values + 0, values + 2)); 

Tuttavia, ciò comporterebbe due poliziotti il contenuto dell'array invece di uno solo.

L'altra soluzione è quella di utilizzare std::copy oltre ad back_inserter:

QList<Struct> ql; 
ql.reserve(2); 
std::copy(values + 0, values + 2, std::back_inserter(ql)); 

Se si usa un array solo per avere un modo semplice per inizializzare il QList, si potrebbe forse usare l'operatore di inserimento invece (supponendo Struct definisce il costruttore appropriato):

QList<Struct> ql; 
ql << Struct(a, b) 
    << Struct(c, d); 
+1

Prima volevo usare un array di int come esempio, ma ho pensato che qualcuno avrebbe raccomandato 'q1 << 1 << 2', quindi ho preso l'esempio di inizializzazione aggregato :) Grazie,' std: : copy' era azzeccato, lo farò! –

2

Usa fromStdList() funzione di membro static come:

std::list<Struct> stdList(values + 0, values + 2); 
QList<Struct> ql = QList<Struct>::fromStdList(stdList); 

O semplicemente in una sola riga:

QList<Struct> ql = QList<Struct>::fromStdList(std::list<Struct>(values + 0, values + 2)); 
+5

Grazie. È semplicemente orribile :) –

Problemi correlati