QLcdNumber 设置固定格式
QLcdNumber set fixed format
我想知道是否有一种方法可以将 QLcdNumber
小部件设置为具有固定的格式宽度。例如,我想将小部件设置为始终在昏迷前显示 3 个数字,在昏迷后显示 2 个:
000.00
001.00
120.50
100.25
etc.
有办法吗?我会感谢所有帮助。
可能没有您想要的那么简单,但是这个可行:
lcdNumber->setDigitCount(6);
...
double d = 1.2;
int i = d;
lcdNumber->display(QString("%1").arg(i, 3, 10, QChar('0'))
+ "."
+ QString("%1").arg(qRound((d - i) * 100), 2, 10, QChar('0')));
我在该地区的一些发现和行为。
如果smalDecimalPoint设置为False,小数点算作一个数字。
如果您向 display() 提供双精度值,尾随的“0”小数点将被截断(参见下面的代码示例)。
QLcdNumber 的十进制行为有点烦人,如果小部件采用大双精度(== 许多数字正在播放)并快速更新。对于小数,小数位数较多,显示的位数取决于该值是否相对偶数(例如 1,500000 或 1,51231231)
double d = 1.2300000;
lcdNumber->setDigitCount(6);
lcdNumber->display(d);
// Result 1.23 -- not 1.2300 as wanted/expected...
d = 12.3456789;
lcdNumber->display(d);
// Result 12.345 -- six digits including decimal point
lcdNumber->smalDecimalPoint = false;
lcdNumber->display(d);
// Result 12.3456 -- six digits excluding decimal point
所以为了流畅的视觉效果而不是跳动的 LCDnumber,Amartel 提出的解决方案是唯一的方法...
// well, there is always an other way
// Old school
double d = 1.23456789
char buffer[7];
sprintf(buffer, "%03.02f", d);
lcdNumber->display(QString(buffer));
// Have not test this, but should work :-/, but that is a bit c-old-style-not-so-safe :-)
// might need to cast the buffer to be accepted for QString
我想知道是否有一种方法可以将 QLcdNumber
小部件设置为具有固定的格式宽度。例如,我想将小部件设置为始终在昏迷前显示 3 个数字,在昏迷后显示 2 个:
000.00
001.00
120.50
100.25
etc.
有办法吗?我会感谢所有帮助。
可能没有您想要的那么简单,但是这个可行:
lcdNumber->setDigitCount(6);
...
double d = 1.2;
int i = d;
lcdNumber->display(QString("%1").arg(i, 3, 10, QChar('0'))
+ "."
+ QString("%1").arg(qRound((d - i) * 100), 2, 10, QChar('0')));
我在该地区的一些发现和行为。
如果smalDecimalPoint设置为False,小数点算作一个数字。 如果您向 display() 提供双精度值,尾随的“0”小数点将被截断(参见下面的代码示例)。
QLcdNumber 的十进制行为有点烦人,如果小部件采用大双精度(== 许多数字正在播放)并快速更新。对于小数,小数位数较多,显示的位数取决于该值是否相对偶数(例如 1,500000 或 1,51231231)
double d = 1.2300000;
lcdNumber->setDigitCount(6);
lcdNumber->display(d);
// Result 1.23 -- not 1.2300 as wanted/expected...
d = 12.3456789;
lcdNumber->display(d);
// Result 12.345 -- six digits including decimal point
lcdNumber->smalDecimalPoint = false;
lcdNumber->display(d);
// Result 12.3456 -- six digits excluding decimal point
所以为了流畅的视觉效果而不是跳动的 LCDnumber,Amartel 提出的解决方案是唯一的方法...
// well, there is always an other way
// Old school
double d = 1.23456789
char buffer[7];
sprintf(buffer, "%03.02f", d);
lcdNumber->display(QString(buffer));
// Have not test this, but should work :-/, but that is a bit c-old-style-not-so-safe :-)
// might need to cast the buffer to be accepted for QString