【发布时间】:2019-05-19 03:54:20
【问题描述】:
让我们看看这个小应用程序:
#include <QString>
#include <QDebug>
int main(int argc, char *argv[]) {
const auto test_string =
QString{"Some string \n \x01 \u0002 with some \r special chars"};
qDebug() << test_string;
qDebug(qPrintable(test_string));
}
它给出以下输出:
"Some string \n \u0001 \u0002 with some \r special chars"
Some string
special chars
Press <RETURN> to close this window...
这演示了 qDebug
我想使用此功能将字符串输入自定义日志框架。有没有可能直接使用同一个转换函数?
实际上,这意味着将 test_string 转换为 QString 实例,该实例在上述两个 qDebug 语句上提供相同的输出。
【问题讨论】:
-
我寻找了
QDebug::operator<<(const QString&)的实现,最终得到了一个函数模板static inline putEscapedString()。顺便提一句。我发现QDebug有一个构造函数,可以在其中传递QString。因此,您可以将QDebug实例化为QString以将其用作格式化程序。对我来说,这似乎不那么烦人,因为只是从putEscapedString()复制源代码来制作自己的格式化程序,但后者也可能是一种选择。 -
bitbucket.org/codeimproved/qslog 请检查这个。所以适度似乎决定我应该复制粘贴 qslog 的实现作为我的答案。没门。在。地狱。