1. 目标
我和我的同事一直在尝试在 Qt 中渲染旋转的椭球体。据我们了解,典型的解决方法包括将椭球的中心移动到坐标系的原点,在那里进行旋转,然后向后移动:http: //qt-project.org/doc/qt-4.8 /qml-rotation.html
2. 示例代码
基于上面链接中概述的解决方案,我们提出了以下示例代码:
// Constructs and destructors
RIEllipse(QRect rect, RIShape* parent, bool isFilled = false)
: RIShape(parent, isFilled), _rect(rect), _angle(30)
{}
// Main functionality
virtual Status draw(QPainter& painter)
{
const QPen& prevPen = painter.pen();
painter.setPen(getContColor());
const QBrush& prevBrush = painter.brush();
painter.setBrush(getFillBrush(Qt::SolidPattern));
// Get rectangle center
QPoint center = _rect.center();
// Center the ellipse at the origin (0,0)
painter.translate(-center.x(), -center.y());
// Rotate the ellipse around its center
painter.rotate(_angle);
// Move the rotated ellipse back to its initial location
painter.translate(center.x(), center.y());
// Draw the ellipse rotated around its center
painter.drawEllipse(_rect);
painter.setBrush(prevBrush);
painter.setPen(prevPen);
return IL_SUCCESS;
}
如您所见,我们在此测试样本中将旋转角度硬编码为 30 度。
3. 观察
椭圆出现在错误的位置,通常在画布区域之外。
4. 问题
上面的示例代码有什么问题?
此致,
巴尔德
PS提前感谢任何建设性的回应?
PPS 在发布此消息之前,我们在 stackoverflow.com 上进行了相当多的搜索。 Qt 图像移动/旋转似乎反映了类似于上面链接的解决方案方法。