2011-09-05 18 views
7

Tôi có điều nàyTạo một QList từ một mảng đồng bằng

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

Và tôi chỉ muốn tạo một QList ra khỏi nó

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

Nhưng đối với một số lý do, QList không có constructor phù hợp và dường như không phù hợp với chức năng insert. Cái này hoạt động ra sao? Tôi đang trên Qt4.6.

Trả lời

13

Một giải pháp sẽ được đầu tiên tạo ra một std::list và sau đó chuyển đổi đó vào một QList:

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

Tuy nhiên, điều đó sẽ phát sinh hai cảnh sát ies của nội dung mảng thay vì chỉ một.

Các giải pháp khác là sử dụng std::copy cùng với một back_inserter:

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

Nếu bạn sử dụng một mảng chỉ để có một cách dễ dàng để khởi tạo QList, bạn có thể có lẽ sử dụng toán tử chèn thay vì (giả sử Struct xác định hàm tạo thích hợp):

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

Đầu tiên tôi muốn sử dụng một mảng int như một ví dụ, nhưng tôi đã tìm ra một người nào đó sẽ giới thiệu 'q1 << 1 << 2', vì vậy tôi lấy ví dụ khởi tạo tổng thể :) Cảm ơn,' std: : copy' đã được phát hiện, tôi sẽ làm điều đó! –

2

Sử dụng fromStdList() tĩnh hàm thành viên như:

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

Hoặc chỉ trong một dòng:

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

Cảm ơn. Điều đó thật khủng khiếp :) –

Các vấn đề liên quan