2

我正在学习 QPainter,并且我创建了一个简单的小部件,每次用户单击小部件时,都会出现一个新圆圈。

在此处输入图像描述

但是Qt不允许在paintEvent之外进行绘制,所以每次我想画一个新的圆圈时,我都需要使widget区域失效,并重新绘制之前的所有圆圈。这似乎不是很有效 - 如果有数百甚至数千个元素怎么办。

最好不要删除以前的圆圈,我只是在小部件顶部绘制新的圆圈。但是在 Qt 上,如果不先使之前的内容无效(并因此删除),我就无法绘制。

在 Qt 中处理这种情况的推荐方法是什么?

4

2 回答 2

1

处理这种情况的推荐方法是使用QGraphicsSceneQGraphicsView,然后使用QGraphicsItems填充场景。根据文档,这正是框架的设计目的。

简而言之,您将覆盖QGraphicsScene::mousePressEvent(),并在新方法中创建一个new QGraphicsEllipseItem.

于 2012-08-04T20:11:10.867 回答
1

无需使整个小部件无效。update() 和 repaint() 可以获取您想要重新绘制的坐标,因此只重新绘制更改的部分。

void  update ( int x, int y, int w, int h ) 
void  update ( const QRect & rect ) 
void  update ( const QRegion & rgn ) 

void  repaint ( int x, int y, int w, int h ) 
void  repaint ( const QRect & rect ) 
void  repaint ( const QRegion & rgn ) 
于 2012-08-08T14:18:19.383 回答