2011-09-05 78 views
7

我有這個從普通陣列創建的QList

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

而我只是想創建一個QList出來的

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

但由於某些原因,QList有沒有合適的構造和看似沒有合適的insert功能。這個怎麼用?我在Qt4.6上。

回答

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

首先我想用一個int數組作爲例子,但我想有人會推薦'q1 << 1 << 2',所以我拿了聚合初始化的例子:)謝謝,'std: :複製'是spot-on,我會這樣做! –

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)); 
+5

謝謝。這只是可怕:) –