我开发了一个类似浏览器的应用程序,其中画布具有较大的高度和“普通”宽度,类似于1024x999999。我使用512个缓存的 QPixmap 块(1024x128)显示图片,重新使用它们来显示新的绘图区域。因此,如果用户滚动大图像的某个给定区域,CPU不忙,则使用缓存的块。所以,这就是我的引擎的工作原理。
想要实现缩放。不知道 - 平滑或离散(x2,x3,x4 ......)。表演问题:
答案 0 :(得分:2)
如果您查看文档,您会发现paintEvent
实际上会收到QPaintEvent
个对象。此对象有一个名为region()
的getter方法,它返回一个QRect
,详细说明要重新绘制的区域。
void QWidget::paintEvent ( QPaintEvent * event )
{
QRect region = event->region();
...
}
所以......你只需要重新绘制小部件完全在那个矩形内部分。
对于您的应用程序,我建议您计算矩形中的哪个或哪些图像,并相应地重绘它们,但只绘制那些图像。
对于缩放部分,如果图像是QPainter
个对象,Qt已经优化图像在QPixmap
个对象中的绘制方式。或者他们说......
因此,您可以在paintEvent()
方法内写一些类似的内容:
QPainter painter(this);
...
painter.drawPixmap(pos_x, pos_y, width, height, pixmap);
...
希望有所帮助!