我目前正在开发一个用于绘制地图的Qt应用程序。我正在尝试绘制400,000多行并在使用~2GB后崩溃,但我的机器上仍有内存。我想知道我是否在Qt内部遇到了导致问题的限制。任何人都知道您可以绘制的内容数量是否有限制,或者您是否可以更改此限制?
如果它有用,我在C ++中编写一个具有成员函数来绘制线条的类。代码大致如下
QPointF fromPoint;
QPointF toPoint;
fromPoint = foo( x );
toPoint = foo( y );
m_Painter.drawLine(fromPoint, toPoint );
//m_Painter is a QPainter
编辑:结果问题出在代码中的其他位置。它与正在进行的自定义缓存有关。虽然我仍然感兴趣,但是Qt可以绘制的线数有限制。有谁知道吗?
答案 0 :(得分:3)
QPainter通过QPaintEngine执行其基础图形,其中包含多个实现(如qpaintengine_mac.cpp
,qpaintengine_x11.cpp
或qpaintengine_preview.cpp
)。
某些设备是光栅...并且可能会将每条线绘制到图像缓冲区中,并在绘制完成后丢弃端点。在这种情况下,您可以绘制的行数没有限制。
如果目标设备是OpenGL,或者是打算使用类似PostScript的输出的打印机,那么特定涂料引擎的限制可能是一个因素。你必须看一下具体的那个。
例如:如果你追踪到drawLine的X11实现,你会看到它通过drawPolygon()
向下传递到strokePolygon_dev()
...并在致电XDrawLines时触底反差:
XDrawLines(dpy, hd, gc, pts, numberPoints, CoordModeOrigin);
所以你有另一个抽象层......所以问题就在于XWindows显示参数是否保证是光栅的。 (我的猜测就是它。)
无论如何,所以答案是“如果光栅可能无限制。否则可能依赖 - 但限制(如果有的话)可能来自绘图引擎的底层设备,而不是Qt。” < / p>