Qt绘制逻辑坐标系世界坐标系转换指南

Qt绘图基础中,进行世界坐标系到逻辑坐标系的转换是一项关键任务。世界坐标系的原点通常在视图的左上角,通过合适的转换,我们可以将原点移动到视图的中心,且使Y轴向上X轴向右。这使得绘图操作更加直观,以下是具体实现步骤:

  1. 设置反走样和转换: 使用 QPainter 进行绘图时,首先要启用反走样:

cpp

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing, true);

接下来,通过 setWorldTransform(painter) 函数进行物理坐标系到逻辑坐标系的转换。这样,在之后的绘图操作中,所有的形状都将基于逻辑坐标系绘制。

  1. 绘制示例: 在逻辑坐标系下,可以绘制矩形、多边形等形状。例如:

cpp

drawRectScale(painter);

draw_shearRect(painter);

通过 rotate() 函数实现缩放效果,也可以对绘图进行比例变换。

  1. 逻辑坐标映射: 要将世界坐标(原点在左上角)转换到逻辑坐标(原点在屏幕中央),可以使用以下函数:

cpp

QPointF QtPixPainter::mapToScene(const QPointF& point) {

QTransform transMatrix = _transform.inverted();

return transMatrix.map(point);

}

该函数利用矩阵翻转实现坐标映射。

  1. 鼠标位置显示: 在鼠标移动时,可以获取逻辑坐标并以标签形式展示:

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的绘图体验。

zip 文件大小:7.34KB