我有这个
Struct values[] = {
{ a, b },
{ c, d }
};
我只想创建一个QList
QList<Struct> ql(values + 0, values + 2);
但由于某种原因,QList
没有合适的构造函数,似乎没有合适的insert
函数。这是如何运作的?我在Qt4.6上。
答案 0 :(得分:13)
一种解决方案是首先创建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);
答案 1 :(得分:2)
使用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));