Qt绘制逻辑坐标系世界坐标系转换指南
Qt绘图基础中,进行世界坐标系到逻辑坐标系的转换是一项关键任务。世界坐标系的原点通常在视图的左上角,通过合适的转换,我们可以将原点移动到视图的中心,且使Y轴向上,X轴向右。这使得绘图操作更加直观,以下是具体实现步骤:
- 设置反走样和转换:
使用
QPainter
进行绘图时,首先要启用反走样:
cpp
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
接下来,通过 setWorldTransform(painter)
函数进行物理坐标系到逻辑坐标系的转换。这样,在之后的绘图操作中,所有的形状都将基于逻辑坐标系绘制。
- 绘制示例: 在逻辑坐标系下,可以绘制矩形、多边形等形状。例如:
cpp
drawRectScale(painter);
draw_shearRect(painter);
通过 rotate()
函数实现缩放效果,也可以对绘图进行比例变换。
- 逻辑坐标映射: 要将世界坐标(原点在左上角)转换到逻辑坐标(原点在屏幕中央),可以使用以下函数:
cpp
QPointF QtPixPainter::mapToScene(const QPointF& point) {
QTransform transMatrix = _transform.inverted();
return transMatrix.map(point);
}
该函数利用矩阵翻转实现坐标映射。
- 鼠标位置显示: 在鼠标移动时,可以获取逻辑坐标并以标签形式展示:
cpp
void QtPixPainter::mouseMoveEvent(QMouseEvent* event) {
QPointF mouse_po = mapToScene(event->pos());
double x = mouse_po.x();
double y = mouse_po.y();
QString str = "(" + QString::number(x) + "," + QString::number(y) + ")";
}
这段代码实现了鼠标逻辑位置的实时更新。
总结:通过转换世界坐标系为逻辑坐标系,绘图过程变得更加直观和易于控制。这种方法有效地优化了基于Qt的绘图体验。
评论区