2013-08-25 5 views
22

क्या निम्नलिखित काम पाने का कोई आसान तरीका है? मेरा मतलब है Qt में कोई सहायक वर्ग है जो qDebug के लिए स्ट्रिंग तैयार करता है?qDebug के साथ स्ट्रिंग शाब्दिक और क्यूस्ट्रिंग मुद्रित करने के लिए कैसे?

QString s = "value"; 
qDebug("abc" + s + "def"); 

उत्तर

16

मुझे पता नहीं है कि वास्तव में कोई आसान तरीका नहीं है। आप कर सकते हैं:

QByteArray s = "value"; 
qDebug("abc" + s + "def"); 

या

QString s = "value"; 
qDebug("abc" + s.toLatin1() + "def"); 
3

बस इस तरह अपने कोड को फिर से लिखने:

qDebug().nospace() << "abc" << qPrintable(s) << "def"; 

nospace() के लिए है:

QString s = "value"; 
qDebug() << "abc" << s << "def"; 
+1

यह वही नहीं है। आपका कोड 'abc "मान" def' देता है। उसका कोड 'abcvaluedef'। विभिन्न उपयोग मामले। – Greenflow

19

आप निम्न का उपयोग कर सकते ई के बाद रिक्त स्थान प्रिंटिंग से बचें बहुत तर्क (जो qDebug() के लिए डिफ़ॉल्ट है)।

+0

डॉक्स के अनुसार qPrintable पर qUtf8 प्रिंट करने योग्य अनुशंसा करने की अनुशंसा की जाती है, क्योंकि qDebug() (और दोस्तों) यूटीएफ -8 की अपेक्षा करते हैं जो हमेशा LLalal8Bits() (जो qPrintable कॉल है) देता है – dsonck92

6

विकल्प 1:

qDebug("abc%sdef", s.toLatin1().constData()); 

विकल्प 2:: एक सी स्ट्रिंग प्रारूप और चर तर्क सूची (printf की तरह) का प्रयोग qDebug के डिफ़ॉल्ट मोड के साथ सी ++ संस्करण का उपयोग करें अतिभारित < < ऑपरेटर:

#include <QtDebug> 
qDebug().nospace() << "abc" << qPrintable(s) << "def"; 

संदर्भ: https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug

7

Qt Core 5.6 documentation के अनुसार आपका उपयोग करना चाहिए <QtGlobal> सेQStringqDebug के साथ मुद्रित करने के लिए शीर्षलेख।

इस प्रकार आप करना चाहिए:

QString s = "some text"; 
qDebug("%s", qUtf8Printable(s)); 

या कम:

QString s = "some text"; 
qDebug(qUtf8Printable(s)); 

देखें:

0

मुझे पता है कि यह प्रश्न थोड़ा पुराना है, लेकिन यह वेब पर इसकी खोज करते समय लगभग शीर्ष पर दिखाई देता है।

inline QDebug operator<<(QDebug dbg, const std::string& str) 
{ 
    dbg.nospace() << QString::fromStdString(str); 
    return dbg.space(); 
} 

यह बात अपनी परियोजनाओं के सभी में वर्षों के लिए है, मैं लगभग भूल जाते हैं कि यह अभी भी वहाँ नहीं है: एक यह std :: इस तरह तार को स्वीकार करने के लिए qDebug के लिए ऑपरेटर (QDebug के लिए और अधिक विशिष्ट) ओवरलोड कर सकते हैं डिफ़ॉल्ट रूप से।

उसके बाद, qDebug() के लिए < < का उपयोग बहुत अधिक उपयोग करने योग्य imho है। आप क्यूस्ट्रिंग और std :: स्ट्रिंग भी मिश्रण कर सकते हैं। कुछ अतिरिक्त (लेकिन वास्तव में इरादा नहीं) सुविधा यह है कि आप कभी-कभी पूर्णांक या अन्य प्रकारों में फेंक सकते हैं जो std :: string पर अंतर्निहित रूपांतरण की अनुमति देते हैं।

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