起源
CSDN上有网友问到:
在qpixmap(40000,100)上画图到x=32768之后就画不出来了怎么办验证写段代码测试一下:
import sys结果确实如网友所说:一条直线,无故终止了。
原因原因何在呢?打开google,搜索,再搜索,依然无果。于是,还是看源码吧:
Qt 的 Paint System 由三部分构成
对我们这个情况来说,QPainter 不用多说,QPixmap 是 QPaintDevice 的派生类,也容易理解。唯独 QPaintEngine 比较隐蔽, 我们这儿关注的是它的派生类 QRasterPaintEngine
$QTDIR/src/gui/painting/qpaintengine_raster.cpp函数调用 关系:
QPainter::QPainter(QPaintDevice *pd)
bool QPainter::begin(QPaintDevice *pd)
bool QRasterPaintEngine::begin(QPaintDevice *device)
void QRasterPaintEnginePrivate::systemStateChanged()
看看 systemStateChanged() 的代码:
void QRasterPaintEnginePrivate::systemStateChanged()发现什么没?有一个宏出现了 QT_RASTER_COORD_LIMIT,其数值为 32767
这样一来,PainterEngine 中的设备大小始终不会超出这个值,而 QPainter 要通过 PainterEngine 实现在 QPainteDevice 中的图线绘制。于是,结果就是我们一开始所看到的了。