2012-11-08 15 views
6

में बदलने के लिए बेहतर है जो मैं उत्सुक हूं। आइए उदाहरण के लिए मुझे कंसोल में एक संख्या आउटपुट करने की आवश्यकता है।क्यूटी: किसी संख्या को QString, QVariant या QString :: संख्या

कोड होगा:

#include <QDebug> 
#include <QVariant> 
#include <QString> 

void displayNumber(quint8 number) { 
    qDebug() << QVariant(number).toString(); 
    qDebug() << QString::number(number); 
//or for example 
// QLabel label; 
// label.setText(QString::number(number)); 
//or 
// label.setText(QVariant(number).toString()); 
} 

कौन सा बेहतर प्रदर्शन बुद्धिमान हो सकता है? मुझे लगता है कि स्मृति खपत भी अलग है। QVariant (संख्या) .toString() का अर्थ यह होगा कि यह स्टैक में एक QVariant स्टोर करता है। QString :: संख्या() के बारे में निश्चित नहीं है, क्या यह केवल फ़ंक्शन को कॉल नहीं करना चाहिए (निश्चित रूप से, फ़ंक्शन में क्यूस्ट्रिंग रिटर्न है, इसलिए इसे स्टैक पर भी आवंटित किया जाता है और वह स्थान लेता है और उस ऑपरेशन को आवंटित और इसे आवंटित करने के लिए)? वैसे भी, sizeof() मुझे QVariant के लिए 16 बाइट्स और QString के लिए 4 बाइट्स देता है।

उत्तर

4

बेशक दूसरा संस्करण बेहतर है।

QString::number() एक स्थिर कार्य है जो वांछित स्ट्रिंग देता है। जब आप QVariant(number).toString(); का उपयोग करते हैं तो आप पहले QVariant बनाते हैं, और इसे वांछित स्ट्रिंग में परिवर्तित करने से पहले, इसलिए आप QVariant प्रकार का एक अतिरिक्त और अनावश्यक चर बनाते हैं।

इसके अलावा, आपको संख्या को qDebug के साथ आउटपुट करने के लिए स्ट्रिंग में बदलने की आवश्यकता नहीं है। qDebug() << 42; ठीक काम करता है।

+0

यही वह भी है जो मैं सोच रहा था। यह QVariant आवंटित करता है और कॉल करने के बाद .toString() यह एक QString भी आवंटित करता है और QString देता है। –

+0

@ मोरारू, हाँ, बिल्कुल;) – SingerOfTheFall

1

नहीं क्यों बस

qDebug << number 

? एक quint8 के मामले में यह संख्या अपने आप के बजाय चरित्र आउटपुट है, तो सिर्फ डाली -

qDebug << static_cast<int>(number); 

या

qDebug << +number; 

मैं (यह एक, समझने को देखने के अभिन्न पदोन्नति के लिए थोड़ा मुश्किल है) मैं शर्त लगा रहा हूं कि यह विकल्प आपके सुझावों की तुलना में बेहतर होगा (प्रदर्शन-वार)।

+0

qDebug() बस एक उदाहरण के रूप में था। आइए QLabel लेबल कहें; label.setText (QString :: संख्या (संख्या)); –

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