gpt4 book ai didi

c++ - 如何在没有附加空格和换行符的情况下调用 qDebug?

转载 作者:IT老高 更新时间:2023-10-28 13:23:55 33 4
gpt4 key购买 nike

我正在使用 C++/Qt 打印函数 qDebug,但有时我想控制如何附加“、空格和换行符并且不使用默认的 qDebug。

我们举个简单的例子:

QString var1("some string");
int var2 = 1;
qDebug() << var1 << "=" << var2;

这将打印出来

"some string" = 1 

但是假设我不喜欢附加的 "和空格并且希望打印看起来像

some string=1 

然后我如何调用 qDebug?


注意:qDebug called nospace 中有一个函数,但它会删除空格。但是 "仍然存在。

如果我使用这个:

qDebug().nospace() << var1 << "=" << var2;

我明白了:

"some string"=1

但请注意,我仍然没有找到摆脱结尾换行符的方法。

/谢谢

最佳答案

最好了解 QDebug 在内部工作。这样您就可以轻松地对其进行修改以满足您的需求。每当您使用 qDebug()函数,它返回一个 QDebug目的。默认 QDebug在使用 operator << 后总是输出一个空格.

QDebug类内部包含 QString .每次使用operator <<您正在附加到该内部 QString。此 QString 是通过 qt_message_output(QtMsgType, char*) 打印的当QDebug对象被销毁。

默认 qt_message_output总是打印后跟换行符的字符串。

正常输出

qDebug() << "Var" << 1;

这将输出 Var 1 .这是因为 qDebug将创建一个 QDebug在每次调用 operator << 后附加一个空格的对象.这将是 Var + + 1 + .

没有空格

您可以使用 QDebug::nospace告诉QDebug不要在每次调用 operator << 后添加空格.

qDebug().nospace() << "Var" << 1;

这将输出 Var1那样QDebug对象不再是打印空格。

没有新行

不添加 \n在字符串的末尾有点难。从 QDebug在内部仅将字符串传递给 qt_message_output当它被销毁时,您可以延迟该 QDebug 对象的销毁 -

QDebug deb = qDebug();
deb << "One" << "Two";
deb << "Three";

这将打印 One Two Three然后追加一个新行。

如果您不想打印新行,则必须更改 qt_message_output 的行为。 .这可以通过安装 custom handler 来完成。 .

void customHandler(QtMsgType type, const char* msg) {
fprintf(stderr, msg);
fflush(stderr);
}

// Somewhere in your program
qInstallMsgHandler(customHandler);

qDebug() << "One" << "Two";
qDebug().noSpace() << "Three" << "Four";

这将打印 One Two ThreeFour .

请注意,这将影响您程序中的所有 qDebug 语句。如果你想删除自定义处理程序,你应该调用 qInstallMsgHandler(0) .

qDebug(const char* msg, ...)

如其他答案所示,您也可以使用 qDebug 以类似于 printf 的格式打印字符串的函数.这样可以避免 QDebug 附加的额外空格。 .

但是, qDebug 内部仍然使用 qt_message_output ,因此除非您安装自己的处理程序,否则您仍然会在末尾获得换行符。

关于c++ - 如何在没有附加空格和换行符的情况下调用 qDebug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209823/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com