2011-01-24 22 views
59

मैं क्यूटी लेबल के लिए एक स्ट्रिंग को प्रारूपित करना चाहता हूं, मैं क्यूटी पर सी ++ में प्रोग्रामिंग कर रहा हूं।क्यूस्ट्रिंग को कैसे प्रारूपित करें?

ObjC में मैं की तरह कुछ लिखते थे:

NSString *format=[NSString stringWithFormat: ... ]; 

कैसे कि क्यूटी में की तरह कुछ करने के लिए?

उत्तर

24

आप तथापि arg विधि पसंद किया जाता है sprintf विधि का उपयोग कर सकते हैं, के रूप में यह यूनिकोड का समर्थन करता है।

QString str; 
str.sprintf("%s %d", "string", 213); 
125

आप क्योंकि इस

QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane"); 
// You get "~/Tom-Jane.txt" 

इस विधि sprintf से अधिक पसंद किया जाता है की तरह QString.arg उपयोग कर सकते हैं:

स्ट्रिंग की स्थिति बदलने से प्रतिस्थापन, उदा का क्रम बदलने के बिना

// To get "~/Jane-Tom.txt" 
QString my_formatted_string = QString("%1/%3-%2.txt").arg("~", "Tom", "Jane"); 

या, तर्क का प्रकार बदलने के प्रारूप स्ट्रिंग को बदलने की आवश्यकता नहीं है, उदाहरण के लिए

// To get "~/Tom-1.txt" 
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", QString::number(1)); 

आप देख सकते हैं, परिवर्तन न्यूनतम है। बेशक, आपको आमतौर पर QString :: arg() में पारित प्रकार के बारे में परवाह करने की आवश्यकता नहीं है क्योंकि अधिकांश प्रकार सही ढंग से अधिभारित होते हैं।

हालांकि एक दोष हालांकि: QString :: arg() std :: string को संभाल नहीं करता है। आपको QString :: arg() पर जाने से पहले इसे QString में बनाने के लिए अपने std :: स्ट्रिंग पर QString :: सेStdString() को कॉल करने की आवश्यकता होगी। कक्षाओं को अलग करने का प्रयास करें जो std :: स्ट्रिंग का उपयोग करने वाले वर्गों से QString का उपयोग करते हैं। या यदि आप कर सकते हैं, तो क्यूस्ट्रिंग पर पूरी तरह से स्विच करें।

अपडेट: फ्रैंक ओस्टरफेल्ड के लिए उदाहरण अपडेट किए गए हैं।

अपडेट: उदाहरण अपडेट किए गए हैं Alexisdm के लिए धन्यवाद।

+17

.र्ग (x) .arg (y) .arg (z) के बजाय .arg (x, y, z) के बजाय .र्ग()। Arg() इस तरह की चेन से बचें। यह तेज़ और अधिक सुरक्षित दोनों है - यदि स्ट्रिंग एक्स में उदा। "% 1", y% 2 के बजाय उस% 1 को प्रतिस्थापित करेगा। आम तौर पर क्या इरादा नहीं है। –

+3

हालांकि आप ऑर्डरिंग बदल सकते हैं, लेकिन क्रमांकित तर्कों को निकालना संभव नहीं लगता है। उदाहरण के लिए, क्यूस्ट्रिंग ("% 3")। Arg ("~", "टॉम", "जेन") परिणाम "~" में होते हैं। जैसा कि पहले लग रहा था उतना उपयोगी नहीं है ... – iforce2d

+0

शायद, लेकिन फिर यह तर्क() में भी उन अतिरिक्त तर्कों को छोड़ने का अर्थ नहीं है। स्प्रिंटफ में, यदि आप तर्कों के प्रकार को बदलते हैं, तो अब आपको अपनी प्रारूप स्ट्रिंग में और भी बदलाव करने की आवश्यकता है। –

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