【Qt 学习笔记】Qt的坐标体系

本文介绍了Qt中的坐标体系分类,包括数学坐标系(右手坐标系和平面直角坐标系)与计算机坐标系(左手坐标系),重点讲解了move函数在设置控件位置的应用,通过实例展示了如何使用move函数移动Qt控件。
摘要由CSDN通过智能技术生成

  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt的坐标体系

文章编号:Qt 学习笔记 / 11


一、坐标体系分类

1. 数学坐标系(右手坐标系、平面直角坐标系)

在这里插入图片描述

在数学里,笛卡尔坐标系(英语:Cartesian coordinate system)也称直角坐标系,是一种正交坐标系。
通常,两条数轴分别置于水平位置与垂直位置,取向右与向上的方向分别为两条数轴的正方向。水平的数轴叫做x轴(x-axis)或横轴,垂直的数轴叫做y轴(y-axis)或纵轴,x轴y轴统称为坐标轴,它们的公共原点O称为直角坐标系的原点(origin),以点O为原点的平面直角坐标系记作平面直角坐标系xOy。

2. 计算机坐标系(左手坐标系)

在这里插入图片描述

计算机坐标系是一种用来描述计算机屏幕上的像素位置的坐标系统。计算机坐标系通常采用二维笛卡尔坐标系,即横轴和纵轴分别代表水平和垂直方向的像素位置。

计算机坐标系的原点通常位于屏幕的左上角,横轴向右增长,纵轴向下增长。坐标的单位是像素,即屏幕上的最小可见点的大小。

根据不同的操作系统和编程语言,计算机坐标系的原点和方向可能有所不同,但通常都遵循上述描述的规则。计算机的图形编程中,常常使用计算机坐标系来描述和操作屏幕上的图形对象。


二、Qt坐标体系

1. Qt坐标体系概述

Qt坐标体系采用计算机坐标系(左手坐标系)
坐标系的原点(0,0)就是屏幕的左上角,给Qt的某个控件,设置位置,就需要指定坐标。
对于这个控件来说,坐标原点就是相对于父窗口或者控件的。

在这里插入图片描述

2. move函数的使用

在Qt中,可以使用QWidget类的move函数来设置按钮的位置。move函数将按钮的左上角放置在指定的坐标位置上。

   QPushButton* button2=new QPushButton(this);
    button2->setText("按钮2");
    button2->move(200,300);

通过调整move函数中的参数,可以设置按钮在窗口中的任意位置。例如,如果想将按钮放置在窗口的中心位置,可以计算窗口的中心坐标,并将其作为move函数的参数。详细代码查看第三章


三、示例代码及解释

在这里插入图片描述

示例代码:

//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* button=new QPushButton(this);
    button->setText("按钮1");

    QPushButton* button2=new QPushButton(this);
    button2->setText("按钮2");
    button2->move(200,300);
}

Widget::~Widget()
{
    delete ui;
}

运行结果:

代码中使用move函数对按钮2进行移动(向右200像素,向下300像素)

在这里插入图片描述


在这里插入图片描述

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
本资源为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 = "<pos().x()<<",world y = "<pos().y(); m_mouse_lable->setText(str); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Duck Bro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值