2011-09-05 14 views
7

mam toTworzenie qlist od zwykłej tablicy

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

A ja po prostu chcą stworzyć QList z niego

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

Ale z jakiegoś powodu, QList ma odpowiedniego konstruktora i pozornie brak odpowiedniej funkcji insert. Jak to działa? Jestem na Qt4.6.

Odpowiedz

13

Jednym rozwiązaniem byłoby najpierw utworzyć std::list a następnie przekonwertować do QList:

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

To jednak spowodowałoby dwóch policjantów rzy zawartości tablicy zamiast jednego.

Innym rozwiązaniem jest użycie std::copy wraz z back_inserter:

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

Jeśli używasz tablicę tylko mieć łatwy sposób zainicjować QList, można chyba użyć operatora wstawiania zamiast (zakładając Struct definiuje właściwego konstruktora):

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

Najpierw chciałem użyć tablicy int jako przykładu, ale pomyślałem, że ktoś poleci 'q1 << 1 << 2', więc wziąłem przykład agregacji inicjalizacji :) Dzięki,' std: : copy' był na miejscu, zrobię to! –

2

Zastosowanie fromStdList() statyczna funkcja członek jako:

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

lub tylko w jednym wierszu:

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

Dzięki. To po prostu okropne :) –