本资源为Qt绘图基础,世界
坐标系转换为逻辑坐标系。世界坐标系原点在视图左上角,本例子通过世界坐标转换,将坐标原点定位在视图中央,Y轴向上,X轴向右,并绘制坐标轴,基于逻辑坐标系下的绘图,可将转换关系函数取消生效,对比世界坐标系下的绘图。
重写PainterEvent函数:
void QtPixPainter::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
// 反走样
painter.setRenderHint(QPainter::Antialiasing, true);
//物理坐标系与逻辑坐标系的转换,如果不转换,下面的绘图都是在世界坐标系下
setWorldTransform(painter);
// 其他一些绘制矩形,多边形的例子,经过上面转换,都是在逻辑坐标系下
drawRectScale(painter);
//draw_shearRect(painter);
//利用rotate()函数进行比例变换,实现缩放效果
//draw_rotate_act(painter);
//draw_by_save_restore(painter);
//transform_draw_SinX(painter);
transform_draw(painter);
local_drawConvexPolygon(painter);
}
// 将世界坐标(原点左上角)转换为逻辑坐标(原点在屏幕中间)
QPointF QtPixPainter::mapToScene(const QPointF& point)
{
QTransform transMatrix = _transform.inverted(); //翻转矩阵?
return transMatrix.map(point); //将点piont映射到transMatrix定义的坐标系中来
}
// 将鼠标的逻辑位置返回并以标签形式展示
void QtPixPainter::mouseMoveEvent(QMouseEvent* event)
{
QString msg;
QPointF mouse_po = mapToScene(event->pos()); //总是返回屏幕物理坐标系
double x = mouse_po.x(); // 总是返回屏幕物理坐标系
double y = mouse_po.y();
QString str = "(" + QString::number(x) + "," + QString::number(y) + ")";
//qDebug()<<"world x = "
2021-05-26 14:02:42
7KB
Qt
坐标系
1