我在我的图形场景中绘制一个椭圆。当椭圆倾斜时,其边界的一部分不会立即出现。在我重新调整窗口大小或在我的图形场景中执行放大或缩小操作后,椭圆边界会更新,我会得到所需的完美形状。
我已将椭圆的绘画功能定义为:
QPainterPath ellipse;
ellipse.moveTo(p1.x()+majRadius, p1.y());
ellipse.arcTo(boundingRect(), 0 , 360);
QPen paintpen(Qt::black);
paintpen.setWidth(1);
painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(paintpen);
painter->save();
painter->translate(p1.x(), p1.y());
painter->rotate(theta);
painter->translate(-p1.x(), -p1.y());
painter->drawPath(ellipse);
painter->restore();
我的边界矩形的定义是:
return QRectF(p1.x()-majRadius, p1.y()-minRadius,
2*majRadius, 2*minRadius).normalized();
我附上了两个椭圆形的截图:
如何解决这个问题?
答案 0 :(得分:2)
你没有显示重要的代码,但我想我可以猜出是什么问题。
当您更改QGraphicsItem
的某些对QGraphicsItem::boundingRect()
产生影响的属性时,您应该QGraphicsItem::prepareGeometryChange
致电update
,而不是painter->setRenderHint(QPainter::Antialiasing);)
。
请参阅QGraphicsItem::boundingRect的文档。
我看到的第二个问题是你搞乱了旋转平移和边界矩形。尝试只旋转画家路径而不是画家本身。
我能看到的另一个问题是,你正在以错误的方式拯救和恢复画家。保存应该在您对painter执行任何更改之前发生(在{{1}}之前的情况下,并在绘制项目完成后恢复其状态(这是好的)。