2011-09-05 21 views
7

मैं इसएक सादे सरणी से एक QList बनाना

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

है और मैं सिर्फ एक QList यह

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

से बाहर बनाना चाहते हैं लेकिन किसी कारण से, QList कोई उपयुक्त निर्माता और उचित रूप में है कोई उपयुक्त insert फ़ंक्शन। यह कैसे काम करता है? मैं क्यूटी 4.6 पर हूं।

उत्तर

13

एक समाधान पहले एक std::list बनाने और उसके बाद परिवर्तित कि एक QList में होगा:

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

हालांकि, यह दो पुलिस केवल एक के बजाय सरणी सामग्री के ies।

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

आप एक सरणी का उपयोग करते हैं तो बस QList प्रारंभ करने में एक आसान तरीका है करने के लिए, आप शायद प्रविष्टि ऑपरेटर इस्तेमाल कर सकते हैं बजाय (Struct संभालने:

अन्य समाधान एक back_inserter के साथ std::copy उपयोग करने के लिए है उचित कन्स्ट्रक्टर को परिभाषित करता है):

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

सबसे पहले मैं एक उदाहरण के रूप में int की एक सरणी का उपयोग करना चाहता था, लेकिन मुझे लगा कि कोई 'q1 << 1 << 2' की सिफारिश करेगा, इसलिए मैंने कुल प्रारंभिक उदाहरण लिया :) धन्यवाद, 'std: : प्रतिलिपि 'स्पॉट-ऑन थी, मैं वह करूँगा! –

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

धन्यवाद। यह सिर्फ भयानक है :) –

संबंधित मुद्दे