2012-11-18 28 views
15

Đôi khi tôi muốn ra một dòng duy nhất trong qDebug(), nhưng với một số văn bản có điều kiện, nhưTránh xuống dòng trong qDebug()

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

Tuy nhiên, đó sẽ xuất chúng trên 2 dòng riêng biệt.

Có cách nào để tránh gắn thêm một dòng mới sau mỗi qDebug() không?

+0

sau, tôi tìm thấy một câu hỏi liên quan (nhưng nó yêu cầu về không gian cũng) - https://stackoverflow.com/questions/5209823/how-to-call-qdebug-without-the-appended-spaces- và-newline – sashoalm

Trả lời

28

Tôi vừa tìm ra giải pháp có vẻ hoạt động. Đọc tài liệu qDebug() trả về một đối tượng QDebug tạm thời, gắn thêm dòng mới vào sự hủy diệt. Có vẻ như đối tượng tạm thời này có thể được lưu trữ trong một biến tạm thời:

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

Mọi thứ phức tạp hơn (phức tạp không cần thiết mà tôi có thể thêm) trong Qt 5.7 (và có thể trong bất kỳ 5.x) nào. 'qDebug()' không còn biến một đối tượng 'QDebug' sẵn sàng sử dụng, do đó người ta phải giải quyết toàn bộ vấn đề bằng cách đọc tấn tài liệu. Khá khó chịu. – rbaleksandar

3

Bạn có thể sử dụng toán tử bậc ba.

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

Cách khác là tạo hàng đợi trong QString như thế này.

QString debugString; 

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

debugString += QString::number(fontMetricsLeading); 

qDebug() << debugString; 

Mặc dù tôi không thấy lý do tại sao bạn cần phải đi đến mức này nếu nó chỉ nhằm mục đích gỡ lỗi.

0

Một cách khác để giải quyết tình huống của bạn.

QString msg; 

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

qDebug("%s, %d", qPrintable(msg), fontMetricsLeading); 
Các vấn đề liên quan