有什么简单的方法可以完成以下工作吗?我的意思是,在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。