如何使用qDebug打印字符串文字和QString



有什么简单的方法可以完成以下工作吗?我的意思是,在Qt中是否有为qDebug准备字符串的助手类?

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

您可以使用以下内容:

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

nospace()是为了避免在每个参数后打印出空格(这是qDebug()的默认值)。

据我所知,没有真正简单的方法。你可以做:

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

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

根据Qt Core 5.6文档,您应该使用<QtGlobal>标头中的qUtf8Printable()来使用qDebug打印QString

你应该做如下:

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

或更短:

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

参见:

  • http://doc.qt.io/qt-5/qtglobal.html#qPrintable

  • http://doc.qt.io/qt-5/qtglobal.html#qUtf8Printable

选项1:使用qDebug的C字符串格式和变量参数列表的默认模式(如printf):

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

选项2:使用重载<lt;操作员:

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

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

只需像这样重写代码:

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

我知道这个问题有点老,但在网上搜索时,它几乎会出现在顶部。可以重载qDebug的运算符(更具体地说是qDebug),使其接受如下的std::字符串:

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

这件事在我所有的项目中已经存在多年了,我几乎忘记了默认情况下它仍然不存在。

之后,<lt;因为qDebug()是一个更有用的imho。您甚至可以混合使用QString和std::string。还有一个额外的(但不是真正想要的)功能是,您有时可以插入整数或其他类型,这些类型允许隐式转换为std::string。

相关内容

  • 没有找到相关文章

最新更新