2012-11-18 9 views
15

कभी कभी मैं उत्पादन qDebug() में एक भी लाइन चाहते हैं, लेकिन कुछ सशर्त पाठ के साथ, जैसेबचें न्यू लाइन()

if (fontMetricsLeading < 0) 
    qDebug() << "!!!"; 
qDebug() << fontMetricsLeading; 

हालांकि, कि उत्पादन 2 अलग पंक्ति में उन्हें होगा।

क्या प्रत्येक qDebug() के बाद एक नई लाइन को जोड़ने से बचने का कोई तरीका है?

+0

मैं बाद में एक संबंधित सवाल पाया (लेकिन यह रिक्त स्थान के बारे में और साथ ही पूछता है) - https://stackoverflow.com/questions/5209823/how-to-call-qdebug-without-the-appended-spaces- और-न्यूलाइन – sashoalm

उत्तर

28

मुझे अभी एक ऐसा समाधान मिला है जो काम करता है। दस्तावेज़ों को पढ़ना qDebug() एक अस्थायी QDebug ऑब्जेक्ट देता है, जो विनाश पर नई लाइन जोड़ता है। ऐसा लगता है कि यह अस्थायी वस्तु अस्थायी चर में संग्रहीत की जा सकती है:

QDebug debug = qDebug(); 
if (fontMetricsLeading < 0) 
    debug << "!!!"; 
debug << fontMetricsLeading; 
+0

चीजें 5.7 (और शायद किसी भी 5.x में) में अधिक जटिल (अनावश्यक जटिल मैं जोड़ सकता हूं) हैं। 'qDebug()' अब उपयोग में आसान 'QDebug' ऑब्जेक्ट नहीं बदलता है इसलिए किसी को दस्तावेज़ की बहुत सारी पढ़कर पूरी चीज़ से निपटना होगा। काफी कष्टप्रद। – rbaleksandar

3

आप टर्नरी ऑपरेटर का उपयोग कर सकते हैं।

qDebug() << (fontMetricsLeading < 0 ? "!!!" : "") << fontMetricsLeading; 

एक वैकल्पिक एक QString इस तरह में एक कतार के निर्माण के लिए किया जाएगा।

QString debugString; 

if(fontMetricsLeading < 0) 
    debugString += "!!!"; 

debugString += QString::number(fontMetricsLeading); 

qDebug() << debugString; 

हालांकि मुझे नहीं पता कि आपको इस सीमा तक क्यों जाना होगा यदि यह केवल डीबग उद्देश्यों के लिए है।

0

आपकी स्थिति से निपटने का एक और तरीका।

QString msg; 

if (fontMetricsLeading < 0) 
{ 
    msg = "!!!"; 
} 

qDebug("%s, %d", qPrintable(msg), fontMetricsLeading); 
संबंधित मुद्दे