我做了一个MCVE来解决这个问题。
因此,我使用的缩放比例小得多,无法重现该问题。 然后,我使用了OP所述的缩放比例1.0E14。 突然,线条图消失了。 降低缩放比例,我1E12说(以我1E12 )直到1E12效果很好,但缩放比例更高的线条开始消失。 玩弄这个时,一位同事走了,并暗示这可能只是浮点问题。 我们简短地讨论了这一点,并得出结论:
用非常大的数字乘以非常小的数字根本不是问题。 它由(整数)乘以尾数并加上指数组成。
大数与小数的加/减是一个问题,因为两个数必须使用相等的指数(通过移位尾数)进行加/减尾数。
因此,可能会发生后者,从而将非0值擦除为0。
10 14是二进制的47位数字。 这接近于53位尾数的double精度。 但是 :使用的QPainter渲染引擎可能基于OpenGL,其中float是很多东西的默认设置。 float仅提供尾数的23位!
因此,在对此进行了思考之后,我找到了不使用比例尺10 14进行绘制的充分理由。
为了证明这一点,我做了一个小样本testQPainterDrawLine.cc :
#include
class Widget: public QWidget {
public:
const double scale;
public:
Widget(double scale, QWidget *pQParent = nullptr):
QWidget(pQParent),
scale(scale)
{ }
virtual ~Widget() = defau