QPainterPath QTransform::map

Posted

技术标签:

【中文标题】QPainterPath QTransform::map【英文标题】: 【发布时间】:2013-12-23 08:58:48 【问题描述】:

我想画一个有角度的矩形。它可以工作,但是当我改变角度时,矩形的位置会在其他地方发生变化。我无法理解。有人帮帮我吗?

这是我的代码:

QPoint point = QPoint(100,100); // has to be shown at this point
QSize  size  = QSize(30,30);
QRect rect = QRect(point,size);


QPainterPath Path ;
Path.addRect(rect);

QTransform t; 
t.rotate(myAngle);

QPainterPath newPath= t.map(Path);

QwtPlotShapeItem *Item = new QwtPlotShapeItem( "Shape Name" );
Item->setItemAttribute( QwtPlotItem::Legend, true );
Item->setRenderHint( QwtPlotItem::RenderAntialiased, true );
Item->setShape(newPath );
Item->setPen( Qt::black );
Item->setBrush( QColor("Grey") );
Item->attach(this);

我认为 map() 函数会导致这个问题。但我不知道为什么。谢谢建议

【问题讨论】:

【参考方案1】:

QTransform::rotate 使用 (0, 0) 中心点旋转坐标系。您的矩形不在中心,因此在旋转时会显着移动。您应该将矩形放置在坐标系的中心(point=(-15, -15))并在t.rotate 之后使用t.translate 将旋转的矩形移动到适当的位置。

【讨论】:

以上是关于QPainterPath QTransform::map的主要内容,如果未能解决你的问题,请参考以下文章

QTransform 比例和 boundingRect.size() 之间的关系

从图像构造 QPainterPath [重复]

查找直线和 QPainterPath 之间的交点

在 QGraphicsItem 中使用 QPainterPath 检测鼠标命中

Qt - 使用 QTransform(或类似的),将内部 QRect 缩放到 QGraphics/从 QGraphics

9.4 QPainterPath图形容器介绍