如何使用QDebug打印字符串常量和QString?

34

有没有简单的方法可以让以下工作?我的意思是在Qt中是否有任何辅助类可以为qDebug准备字符串?

QString s = "value";
qDebug("abc" + s + "def");
6个回答

25

您可以使用以下内容:

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

nospace() 的作用是避免在每个参数后打印空格(这是 qDebug() 的默认行为)。


2
根据文档,建议使用qUtf8Printable而不是qPrintable,因为qDebug()(和相关函数)期望UTF-8,而toLocal8Bits()(即qPrintable调用的函数)返回的可能并不总是UTF-8。 - Daniël Sonck

22

我并不知道有什么非常简单的方法。你可以这样做:

QByteArray s = "value";
qDebug("abc" + s + "def");
或者
QString s = "value";
qDebug("abc" + s.toLatin1() + "def");

17

1
这真的应该成为新的被接受的答案。我肯定更喜欢使用qUtf8PrintableqPrintable而不是.toLatin1().constData()和C++的<<运算符。 - kimbaudi

8

选项1:使用qDebug的默认模式,即类似于printf的C字符串格式和变量参数列表:

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

选项2:使用具有重载<<运算符的C++版本:

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

参考资料:https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug

该链接是关于Qt的一个调试工具,它可以将信息打印到控制台或日志文件中,以帮助开发人员进行调试和排错。该工具在Qt应用程序开发和维护过程中非常有用。

4
只需像这样重新编写您的代码:
QString s = "value";
qDebug() << "abc" << s << "def";

1
这不一样。你的代码返回 'abc "value" def'。他的代码是 'abcvaluedef'。使用情况不同。 - Greenflow

1
我知道这个问题有点老,但在网络搜索中它几乎出现在最前面。可以重载qDebug运算符(更具体地说是QDebug),使其接受std::strings,方法如下:
inline QDebug operator<<(QDebug dbg, const std::string& str)
{
    dbg.nospace() << QString::fromStdString(str);
    return dbg.space();
}

这个东西在我所有的项目中已经使用了好几年,我几乎忘记了它不是默认存在的。
之后,我认为使用<<来进行qDebug()更加方便。你甚至可以混合使用QString和std::string。一些额外(但并非特意设计的)的功能是,有时你可以插入整数或其他允许隐式转换为std::string的类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接