2013-08-25 22 views

Trả lời

16

Không có cách nào thực sự dễ dàng mà tôi biết. Bạn có thể làm:

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

hoặc

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

Chỉ cần viết lại mã của bạn như thế này:

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

Điều đó không giống nhau. Mã của bạn trả về giá trị 'abc' 'def'. Mã của ông 'abcvaluedef'. Trường hợp sử dụng khác nhau. – Greenflow

19

Bạn có thể sử dụng như sau:

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

Các nospace() là tránh in ra dấu cách sau e rất đối số (mặc định là qDebug()).

+0

Bạn nên sử dụng qUtf8Printable trên qPrintable theo tài liệu, vì qDebug() (và bạn bè) mong đợi UTF-8 có thể không phải lúc nào cũng là những gì toLocal8Bits() (đó là những gì gọi là qPrintable) trả về – dsonck92

6

Lựa chọn 1: Chế độ mặc định sử dụng qDebug của một định dạng C-string và danh sách đối số biến (như printf):

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

Phương án 2: Sử dụng phiên bản C++ với quá tải < < điều hành:

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

tham khảo: https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug

0

Tôi biết câu hỏi này hơi cũ nhưng nó xuất hiện gần như trên cùng khi tìm kiếm trên web. Người ta có thể nạp chồng toán tử cho qDebug (cụ thể hơn cho QDebug) để làm cho nó chấp nhận std :: chuỗi như thế này:

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

điều này là trong nhiều năm qua trong tất cả các dự án của tôi, tôi gần như quên nó vẫn là không có theo mặc định.

Sau đó, việc sử dụng < < cho qDebug() có nhiều khả năng sử dụng hơn. Bạn thậm chí có thể trộn QString và std :: string. Một số tính năng bổ sung (nhưng không thực sự có ý định) là, đôi khi bạn có thể ném các số nguyên hoặc các loại khác cho phép chuyển đổi ngầm thành std :: string.

Các vấn đề liên quan