我有一个非常宽的QGraphicsScene的QGraphicsView。我需要在drawBackground()中绘制背景,并且背景有点复杂(长循环),尽管它不需要不断重新绘制。我将它存储在函数drawBackground()中的静态QPixmap(我也尝试过QImage)中,并且pixmap是我在视图画家上绘制的。只有在需要的时候再次涂上QPixmap。
如果我没有使用静态像素图,那么每次我向侧面滚动时都会生成复杂的背景。问题是在Windows上显然有一个pixmaps的最大宽度,在我的电脑上它是32770.我可以存储一个pixmaps列表并将它们并排绘制,但它会使代码变得更加丑陋而且我也不知道是什么pixmap的最大宽度适用于每台Windows机器。由于这可能是一个众所周知的问题,我想知道是否有人有更好的解决方案。
感谢。
答案 0 :(得分:0)
您可以使用未加速的光栅绘制设备来避免窗口限制,但32770 * 1024是100MiB的像素图;即使Windows允许你,你可能也不想这样做。
你已经想到了通常的答案(将它放在更合理大小的块中,然后根据需要加载/生成它们)。通常的解决方案的另一部分是使用像QPixmapCache这样的东西来保存最近使用的磁贴,这样你就不会经常重新生成它们(仅当用户滚动很长时间时)。
您没有说复杂背景有多复杂,但您可能还想查看Mandelbrot设置示例,了解如何按需分段渲染(无限)大背景像素图,而不会阻止UI。
答案 1 :(得分:0)
这是平铺模式的常见用例。基本上你将背景分成小图像。
我不确定你为什么会这样认为“它会使代码变得更加丑陋”。它当然不是一个单行。根据您是否具有固定大小的背景图像,平铺代码通常非常简单。