可以全局设置qDebug()浮点精度和数字格式吗?

Fre*_*Kay 7 c++ qt number-formatting

我想使用qDebug(),qInfo()等自定义默认浮点精度和数字格式.

有没有办法在全球范围内定义?

想象一下:

double num = 1.2;
qDebug() << "My floating point Number is: " << QString::number(num, 'f', 2);
//Output: My floating point Number is 1.20
Run Code Online (Sandbox Code Playgroud)

现在我想在每次写一个数字时避免使用QString :: number(num,'f',2),而是更喜欢使用标准的percision和format.

Leo*_*eon 13

可以通过操纵器来控制QDebug流的格式化.因此,你必须打电话QTextStream

qDebug() << fixed << qSetRealNumberPrecision(2);
Run Code Online (Sandbox Code Playgroud)

在你的程序的开头.

但请注意,qDebug()如果某些(未经过仔细编写的)代码设置了所需的格式,并且在完成其作业后没有将其恢复到以前的状态,则格式化状态可能会稍后更改.

编辑

事实证明,QTextStream操纵器的效果(至少结合使用qDebug())仅限于包含语句,并且不会持久存在.因此,您可以做的最好的事情是定义您的替换qDebug()如下:

#define myqDebug() qDebug() << fixed << qSetRealNumberPrecision(2)
Run Code Online (Sandbox Code Playgroud)

并使用它而不是qDebug():

double num = 1.2;
myqDebug() << "My floating point Number is: " << num << endl;
Run Code Online (Sandbox Code Playgroud)

输出:

My floating point Number is:  1.20
Run Code Online (Sandbox Code Playgroud)

  • 您也可以在每个语句的基础上执行 printf 样式,例如 `qDebug("my number is %.2f", num);`。 (2认同)

UmN*_*obe 2

你不能。 qDebug(),,qFatal()等等...返回类的实例QDebug

问题在于该运算符QDebug::operator<<(float f)是非虚拟类成员函数。
如果没有收到编译错误消息,则无法定义另一个

运算符 << 不明确