Создание QList из простого массива - PullRequest
7 голосов
/ 05 сентября 2011

У меня есть

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

И я просто хочу создать из него QList

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

Но по какой-то причине у QList нет подходящего конструктора иказалось бы, не подходит insert функция.Как это работает?Я на Qt4.6.

Ответы [ 2 ]

13 голосов
/ 05 сентября 2011

Одним из решений было бы сначала создать std::list, а затем преобразовать его в QList:

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

Однако для этого потребуется две копии содержимого массива вместо одной.

Другое решение состоит в том, чтобы использовать std::copy вместе с back_inserter:

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

Если вы используете массив только для простого способа инициализации QList, вы можетевозможно, вместо этого используйте оператор вставки (при условии, что Struct определяет правильный конструктор):

QList<Struct> ql;
ql << Struct(a, b)
   << Struct(c, d);
2 голосов
/ 05 сентября 2011

Используйте fromStdList () Статическая функция-член как:

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

Или только в одной строке:

QList<Struct> ql = QList<Struct>::fromStdList(std::list<Struct>(values + 0, values + 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...