Qt中的坐标体系

 

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->move(200,200);

    //创建一个按钮,让这个按钮成作为当前创建的子控件
    QPushButton* btnA=new QPushButton(this);
    //移动按钮的位置
    btnA->move(50,50);
    //给按钮设置固定大小
    btnA->setFixedSize(200,200);

    //创建第二个按钮,让这个按钮成作为当前创建的子控件
    QPushButton* btnB=new QPushButton(btnA);
    //移动按钮的位置
    btnB->move(10,10);
    //给按钮设置固定大小
    btnB->setFixedSize(100,100);

    //创建第三个按钮,让这个按钮成作为当前创建的子控件
    QPushButton* btnC=new QPushButton(btnB);
    //移动按钮的位置
    btnC->move(10,10);
    //给按钮设置固定大小
    btnC->setFixedSize(50,50);
}

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

### QT 中与坐标相关的概念及其实现 #### 1. 坐标系统的定义和特点 在 Qt 的图形绘制体系中,坐标系统是一个核心的概念。默认情况下,Qt 的坐标原点位于窗口的左上角,x 轴向右延伸表示正值方向,而 y 轴则向下延伸表示正值方向[^4]。 #### 2. OpenGL 和 Qt 结合下的坐标转换流程 当使用 Qt 实现 OpenGL 渲染时,通常需要处理多个坐标系之间的转换。这些坐标系包括但不限于局部空间 (Local Space)、世界空间 (World Space)、观察空间 (View Space)、裁剪空间 (Clip Space) 和屏幕空间 (Screen Space)[^2]。通过一系列变换矩阵(如模型矩阵 Model Matrix、视图矩阵 View Matrix 和投影矩阵 Projection Matrix),可以将顶点数据从一个坐标系映射到另一个坐标系。 以下是实现该功能的一个简单代码示例: ```cpp void MyGLWidget::initializeGL() { initializeOpenGLFunctions(); glClearColor(0, 0, 0, 1); } void MyGLWidget::resizeGL(int w, int h) { float aspectRatio = static_cast<float>(w) / h; QMatrix4x4 projection; projection.perspective(45.0f, aspectRatio, 0.1f, 100.0f); // 设置透视投影矩阵 m_projectionMatrix = projection; // 将其存储以便后续使用 } void MyGLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); QMatrix4x4 model; model.translate(0.0f, 0.0f, -5.0f); // 移动物体远离相机 model.rotate(m_rotationAngle, QVector3D(0, 1, 0)); // 绕 Y 轴旋转 QMatrix4x4 view; view.lookAt(QVector3D(0, 0, 0), QVector3D(0, 0, -1), QVector3D(0, 1, 0)); QMatrix4x4 MVP = m_projectionMatrix * view * model; shaderProgram.bind(); // 假设已绑定着色器程序 shaderProgram.setUniformValue("MVP", MVP); } ``` 上述代码片段展示了如何设置投影矩阵、模型矩阵和视图矩阵,并最终计算得到用于渲染的总变换矩阵 `MVP`[^1]。 #### 3. 图像坐标的实际应用案例 对于图像坐标变换的实际操作,在某些场景下可能涉及用户交互或者动态调整显示区域的需求。例如,可以通过创建基于 QDialog 的界面来控制不同参数的影响[^3]。具体来说,可以在界面上提供滑块或其他输入控件以实时修改缩放比例、平移量等属性。 #### 4. 多层嵌套窗口中的相对定位机制 如果项目结构较为复杂,可能会存在多级嵌套的窗口组件情况。此时需要注意的是,每个子窗口相对于父窗口都有独立的一套本地坐标系规则。这意味着即使两个同级别的子部件共享相同的全局位置描述符,在它们内部表达形式也可能完全不同。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猪八戒1.0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值