我想知道是否有一种方法可以将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的十进制行为会有点烦人。对于小数,有大量的小数,并且显示的位数取决于值是否相对均匀(例如1500000或151231231)
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
因此,对于一个平滑的视觉而不是跳跃的LCD数字,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