Mic*_*ael 15 qstring qt qdebug
因此,当您使用qDebug()打印QString时,输出中会突然出现引号.
int main()
{
QString str = "hello world"; //Classic
qDebug() << str; //Output: "hello world"
//Expected Ouput: hello world
}
Run Code Online (Sandbox Code Playgroud)
我知道我们可以使用qPrintable(const QString)来解决这个问题,但我只是想知道为什么QString会像那样工作?并且QString中是否有一个方法来改变它的打印方式?
MrE*_*Sir 25
Qt 5.4有一个新功能,可以让你禁用它.引用文档:
QDebug和QDebug :: noquote()
禁用QChar,QString和QByteArray内容周围的引号字符的自动插入,并返回对该流的引用.
该功能在Qt 5.4中引入.
另请参见quote()和maybeQuote().
(强调我的.)
以下是您如何使用此功能的示例:
QDebug debug = qDebug();
debug << QString("This string is quoted") << endl;
debug.noquote();
debug << QString("This string is not") << endl;
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用QTextStream与stdout.文档中有一个例子:
QTextStream out(stdout);
out << "Qt rocks!" << endl;
Run Code Online (Sandbox Code Playgroud)
Tay*_*510 13
这是因为实施qDebug().
从源代码:
inline QDebug &operator<<(QChar t) { stream->ts << '\'' << t << '\''; return maybeSpace(); }
inline QDebug &operator<<(const char* t) { stream->ts << QString::fromAscii(t); return maybeSpace(); }
inline QDebug &operator<<(const QString & t) { stream->ts << '\"' << t << '\"'; return maybeSpace(); }
Run Code Online (Sandbox Code Playgroud)
因此,
QChar a = 'H';
char b = 'H';
QString c = "Hello";
qDebug()<<a;
qDebug()<<b;
qDebug()<<c;
Run Code Online (Sandbox Code Playgroud)
输出
'H'
H
"Hello"
Run Code Online (Sandbox Code Playgroud)
那么为什么Qt这样做呢?由于qDebug是为了调试的目的,各种类型的输入将成为文本流输出qDebug.
例如,将qDebugboolean值打印到文本表达式true/中false:
inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); }
Run Code Online (Sandbox Code Playgroud)
它输出true或输出false到您的终端.因此,如果您有QString哪个商店true,则需要引号"来指定类型.
小智 5
Qt 4:如果字符串只包含 ASCII,以下解决方法会有所帮助:
qDebug() << QString("TEST").toLatin1().data();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10375 次 |
| 最近记录: |