`
webcenterol
  • 浏览: 950821 次
文章分类
社区版块
存档分类
最新评论

Qt坐标系统

 
阅读更多

坐标变换

World Corrdinates

==>

Window Coordinates

==>

Device Coordinates

(逻辑坐标)

世界变换

中间态坐标

窗口视口变换

(物理坐标)

在默认情况下,3个坐标系是一致的。

世界变换

世界变换直接相关的函数:

QPainter::setWorldMatrixEnabled

启用、禁用世界变换

QPainter::setWorldTransform

设置世界变换

QPainter::worldTransform

获取当前

QPainter::resetTransform

重置为QTransform()

4个常用的函数

QPainter::translate

平移

QPainter::scale

缩放

QPainter::rotate

旋转

QPainter::shear

剪切

注:它们通过直接调用的QTransform的相应成员直接修改世界变换

void QPainter::scale(qreal sx, qreal sy)
{
...
d->state->worldMatrix.scale(sx,sy);
...
}

世界变换的两个马甲:

QPainter::setTransform

QPainter::transform

void QPainter::setTransform(const QTransform &transform, bool combine )

{
setWorldTransform(transform, combine);

}

废弃的函数(Qt4.3开始,QTransform取代了QMatrix的位置,下列函数已不建议使用)

QPainter::setWorldMatrix

QPainter::worldMatrix

...

窗口视口变换

直接相关:

QPainter::setViewTransformEnabled

启用、禁用视口变换

QPainter::viewTransformEnabled

返回 视口变换的状态

QPainter::setViewport

设置视口(物理坐标)

QPainter::setWindow

设置窗口(与视口是同一矩形,中间态坐标)

该变换是简单的线性变换。

复合变换

窗口视口变换和世界变换的复合:

QPainter::combinedTransform

QTransform QPainter::combinedTransform() const

{
Q_D(const QPainter);
return d->state->worldMatrix * d->viewTransform();

}

典型应用:对鼠标事件的响应中,将坐标从物理坐标变换成QPainter需要的逻辑坐标

仿射变换、透射变换

Qt4.3(包括)之前的QMatrix只支持仿射变换(Affine transformation)

平移(Translation)

缩放(Scale

旋转(Rotation

剪切(Shear)

QTransform支持透射变换(perspective transformation)

m11

m12

m13

m21

m22

m23

m31
dx

m32
dy

m33

变换关系:

x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
if (is not affine)

{
w' = m13*x + m23*y + m33
x' /= w'
y' /= w'

}

相关知识:

射影几何学仿射几何学微分几何学

参考

http://doc.qt.nokia.com/4.7/qtransform.html

http://doc.qt.nokia.com/4.7/qpainter.html

http://doc.qt.nokia.com/4.7/coordsys.html

分享到:
评论

相关推荐

    Qt坐标系统与图形绘制

     为了能够使用Qt开发图形绘制软件,首先应该掌握Qt的坐标系统。在Qt中,通过QPainter类来控制它的坐标系统。连同QPaintDevice类与QPaintEngine类,QPainter类构成了Qt绘图系统的基础。其中,QPainter用于执行绘图的...

    qt坐标系详细讲解

    ### Qt坐标系详解 在深入探讨Qt坐标系之前,让我们先理解一下实验八的主要目标——在Qt中进行2D绘图。Qt是一个跨平台的应用开发框架,广泛应用于桌面和嵌入式系统的图形用户界面(GUI)开发。对于任何涉及图形显示...

    【Qt】2D绘图之坐标系统.rar

    本教程主要聚焦于Qt中的坐标系统,这是进行任何图形绘制的基础。Qt的坐标系统是直角坐标系,用于确定屏幕上点的位置。让我们深入探讨这个话题。 首先,Qt的坐标系统以(0, 0)为原点,位于窗口或画布的左上角。X轴正...

    XY.zip_qt 笛卡尔坐标_qt系统

    笛卡尔坐标系,也称为直角坐标系,是数学中最基本的坐标系统之一,由两条互相垂直的数轴组成,通常标记为x轴和y轴。在这个系统中,每个点都可以用一对有序的数值(x, y)来唯一确定,这对数值代表了点沿x轴和y轴的...

    EDA/PLD中的Qt坐标系统与图形绘制

     为了能够使用Qt开发图形绘制软件,首先应该掌握Qt的坐标系统。在Qt中,通过QPainter类来控制它的坐标系统。连同QPaintDevice类与QPaintEngine类,QPainter类构成了Qt绘图系统的基础。其中,QPainter用于执行绘图的...

    Qt 获取屏幕坐标

    在Qt编程中,获取屏幕坐标是一项常见的需求,无论是为了定位窗口、设计用户界面还是进行复杂的交互操作。本篇文章将详细讲解如何在Qt中获取屏幕坐标,并结合提供的代码片段进行解析。 首先,我们要引入Qt的桌面环境...

    用Qt5.7实现极坐标绘图

    与常见的笛卡尔坐标系统(直角坐标系)不同,极坐标系统使用半径(r)和角度(θ)来定位点,而不是x和y坐标。在Qt中,通过QChart和Q PolarSeries类,我们可以方便地在极坐标系下绘制图形。 要使用Qt 5.7实现极坐标...

    Qt画扇形方式实现模拟时钟

    1. Qt坐标系统:理解坐标系统的运作,以便正确放置时钟组件和指针。 2. 继承`QWidget`:创建自定义的`CCClock`类,以承载时钟的绘制逻辑。 3. `paintEvent`:重写此事件处理器,使用`QPainter`绘制时钟。 4. `...

    Qt获取坐标(图像读取及显示,图像坐标及像素值获取及显示)

    Qt中的坐标系统以左上角为原点,X轴向右增加,Y轴向下增加。我们可以使用`QImage`的`pixel`方法获取指定坐标上的像素值: ```cpp QRgb pixelValue = image.pixel(x, y); ``` `QRgb`是一个无符号整型,包含了RGB三...

    Qt5学习资料

    - 渐变和坐标系统:介绍渐变的使用方法和Qt坐标系统。 #### 10. 文件处理 - 介绍Qt如何读写文本文件和二进制文件。 - 遍历容器:讲解使用迭代器遍历容器的方法。 - 隐式数据共享:讨论Qt容器类的数据共享机制。 ##...

    qwtplot3d-0.2.7.zip_3D 曲线_QT_QT曲线_qt 3d_qt 坐标轴

    6. **添加到布局**:将3D绘图对象添加到Qt的布局系统,如`QLayout`,以便在窗口中显示。 7. **更新和显示**:在需要时,通过调用`update()`方法更新图形,然后显示在窗口中。 **应用场景** QwtPlot3D常用于科学...

    ubuntu下 qt5.5 利用opengl画3d坐标系

    在Ubuntu 16.04操作系统中,Qt 5.9.0是一个强大的跨平台应用程序开发框架,广泛用于创建图形用户界面。而OpenGL是一个开放源代码的图形库,专门用于生成2D、3D图像。在Qt中集成OpenGL,可以实现高性能的图形渲染。本...

    QT-坐标系统和坐标变换-绘制曲线应用程序示例

    为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标...

    QT教程及软件的学习

    在2D绘图部分,教程涵盖了从绘制简单图形到复杂文字、路径和图像,以及如何使用Qt坐标系统进行精确绘图。这部分内容对于开发需要图形展示或交互的软件非常关键。同时,还介绍了双缓冲绘图和图形视图框架,以提升图形...

    QT-坐标系统和坐标变换-绘图叠加效果应用程序示例

    为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标...

    QtCreator快速入门

    - **坐标系统**:深入探讨Qt坐标系统的工作原理,以及如何在不同场景中正确使用坐标。 - **涂鸦板程序**:演示如何创建一个简单的涂鸦板程序,允许用户绘制并保存他们的作品。 - **双缓冲绘图**:介绍双缓冲技术的...

    QT教程及软件

    - **坐标系统**:深入探讨Qt坐标系统的概念和使用方法。 - **涂鸦板**:提供一个完整的涂鸦板程序实例。 - **双缓冲绘图简介**:简述双缓冲绘图的概念及其在Qt中的应用。 - **图形视图框架简介**:概述Qt图形视图...

    自定义Qt圆形进度条

    如果进度为100%,则起始角度为-90度(顺时针方向,Qt坐标系统中,正X轴为0度,逆时针为正角度),结束角度为270度。 4. **绘制进度圆弧**:在`paintEvent()`中,使用QPainter的drawArc()函数绘制进度圆弧,传入之前...

Global site tag (gtag.js) - Google Analytics