2011-05-26 16 views
9

मैं ग्राफिकल और जीयूआई घटकों के लिए काम कर रहे एक सॉफ्टवेयर सिस्टम में क्यूटी का व्यापक रूप से उपयोग करता हूं। हालांकि, अधिकांश आंतरिक एल्गोरिदम और डेटा की प्रसंस्करण के लिए क्यूटी एक छोटी भूमिका निभाता है।दोनों std :: स्ट्रिंग और क्यूस्ट्रिंग दोनों का उपयोग करके

मैं अक्सर std :: string से QString या वीज़ा बनाम में कनवर्ट करने की आवश्यकता में भाग लेगा। मेरा झुकाव जितना संभव हो सके std :: स्ट्रिंग का उपयोग करना है और QString केवल का उपयोग करना है जब मुझे फ़ाइल सिस्टम के साथ काम करने वाले क्यूटी कक्षाओं में तारों को पारित करने की आवश्यकता होती है।

जैसा कि मैं आज सुबह प्रोग्रामिंग कर रहा था, यह मुझे मारा कि यह मेरे कोड में छिड़काव दोनों std :: string और QString दोनों के लिए खराब डिज़ाइन हो सकता है। क्या मुझे पूरी तरह से क्यूस्ट्रिंग पर स्विच करना चाहिए? क्या कोई और इस डिजाइन पसंद में भाग गया है?

क्यूटी एसटीएल की एक ही कार्यक्षमता प्रदान करता है, लेकिन क्यूटी कम मानकीकृत और स्थिर होने के बाद भी मैं पूरी तरह से संकोच कर रहा हूं।

उत्तर

9

हां, मुझे पहले यह स्थिति मिली है। कार्यक्रम मैंने पूरे क्यूटी पर काम किया था, लेकिन मुझे इसे एक लाइब्रेरी में लगा देना था जिसकी उम्मीद std::string थी। QString का लाभ यह है कि यह स्पष्ट रूप से यूनिकोड का उपयोग करता है, जबकि सी ++ मानक लाइब्रेरी एन्कोडिंग के बारे में कोई गारंटी नहीं देता है।

समाधान के बाद से पुस्तकालय का उत्पादन किया std::string 'UTF-8 युक्त रों

QString toQString(std::string const &s) 
{ 
    return QString::fromUtf8(s.c_str()); 
} 

std::string fromQString(QString const &s) 
{ 
    return std::string(s.toUtf8().data()); 
} 

के साथ इस पुस्तकालय की सीमा पर हुई कन्वर्ट करने के लिए किया गया था।

जो आप चाहते हैं वह सटीक विपरीत है: std::string का उपयोग करें और क्यूटी सीमा में कनवर्ट करें। यह बिल्कुल ठीक लगता है; यह हमेशा QString का उपयोग करने से थोड़ा अधिक काम लेता है, लेकिन आपको किसी भी तरह की गैर-QString-अस्वीकरण लाइब्रेरी की आवश्यकता होने पर प्रयास करना होगा, और आपके गैर-जीयूआई घटक Qt (hurray!) पर निर्भर नहीं हैं।

+1

'क्यूस्ट्रिंग' में एक विधि' toStdString() 'है। यहां देखें: http://doc.trolltech.com/4.5/qstring.html#toStdString। 'Std :: string' से 'QString' बनाने के लिए आप इस कन्स्ट्रक्टर का उपयोग कर सकते हैं: http://doc.trolltech.com/4.5/qstring.html#QString-7 – yasouser

+1

@Yasourer: हाँ, लेकिन वे वैश्विक स्तर पर निर्भर हैं चरित्र एन्कोडिंग सेट करें। ये फ़ंक्शंस लाइब्रेरी से आते हैं जिन्हें 'std :: string' की दूसरी लाइब्रेरी से मिलती है, जिसमें हमेशा यूटीएफ -8 होता है। –

+0

आप काम करने के लिए उन कार्यों को बेहतर बना सकते हैं भले ही तारों में लंबाई को पार करके, एनयूएल एम्बेडेड एनयूएल शामिल हो - 'वापसी QString :: सेUUF8 (s.c_str(), s.size())' और 'auto buf = s। toUtf8(); वापसी std :: string (buf.data(), buf.size()); '। –

6

मैं आपके प्रोग्राम कोर में std::string का उपयोग कहूंगा, और जब आप GUI भाग पर काम कर रहे हों तो उन्हें QString में परिवर्तित करें। मैं कभी भी अपनी जीयूआई टूलकिट बदलना चाहता हूं, यह आसान होगा।

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