QT开发(十五)——QT坐标系统

QT开发(十五)——QT坐标系统

一、QT坐标系简介

Qt中每一个窗口都有一个坐标系,默认窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)点,以像素为单位增减。

二、坐标系变换

坐标系变换是利用变换矩阵来进行的, 通常利用QTransform类来设置变换矩阵。QPainter类提供了对坐标系的平移,缩放,旋转,扭曲等变换函数。

void translate(const QPointF & offset)

void translate(const QPoint & offset)

void translate(qreal dx, qreal dy)

void scale(qreal sx, qreal sy)

void shear(qreal sh, qreal sv)

void rotate(qreal angle)

void save()

void restore()

1、平移变换

QT利用translate()函数进行平移变换。

平移变换代码:

QPainter painter(this);

painter.setBrush(Qt::yellow);

painter.drawRect(0,0,50,50);

//将当前坐标系下的点(100,100)设为原点

painter.translate(100,100);

painter.setBrush(Qt::red);

painter.drawRect(0,0,50,50);

//将当前坐标系下的点(-100,-100)设为原点

painter.translate(-100,-100);

painter.drawLine(0,0,20,20);

2、比例变换

利用scale()函数进行比例变换,实现缩放效果。

比例变换代码:

QPainter painter(this);

painter.setBrush(Qt::yellow);

painter.drawRect(0,0,100,100);

//将坐标系在x,y方向放大2倍

painter.scale(2,2);

painter.setBrush(Qt::red);

painter.drawRect(50,50,50,50);

3、扭曲变换

利用shear()函数就行扭曲变换。

扭曲变换代码:

QPainter painter(this);

painter.setBrush(Qt::yellow);

painter.drawRect(0,0,50,50);

//对当前坐标系的y轴进行扭曲

painter.shear(0,1);

painter.setBrush(Qt::red);

painter.drawRect(50,0,50,50);

4、翻转变换

利用rotate()函数进行翻转变换。

翻转变换代码:

QPainter painter(this);

//以原点为中心,顺时针旋转30度

painter.rotate(30);

painter.drawLine(0,0,100,0) ;

//以原点为中心,顺时针再旋转30度

painter.rotate(30);

painter.drawLine(0,0,100,0);

5、坐标系状态的保护

绘图过程中需要快速的进行坐标系切换,绘制出不同的图形,因此需要对坐标系状态进行保护,可以先利用save()函数来保存坐标系现在的状态,然后进行变换操作,操作完之后,再用restore()函数将以前的坐标系状态恢复,本质是对坐标系进行入栈和出栈的操作。

坐标系状态保护代码:

QPainter painter(this);

//保存当前坐标系状态

painter.save();

//平移坐标系原点到(100, 100)

painter.translate(100,100);

painter.drawLine(0,0,50,50);

//将当前原点位于点(100, 100)的坐标系恢复到保存的坐标系状态

painter.restore();

painter.drawLine(0,0,50,50);

时间: 2024-10-03 22:40:18

QT开发(十五)——QT坐标系统的相关文章

QT开发(五十二)———QML语言

QT开发(五十二)---QML语言 QML是一种声明语言,用于描述程序界面.QML将用户界面分解成一块块小的元素,每一元素都由很多组件构成.QML定义了用户界面元素的外观和行为:更复杂的逻辑则可以结合JavaScript脚本实现. 一.QML基础语法 1.Import语句 QML代码中,import语句一般写在头几行,主要用途如下:     A.包含类型的全名空间     B.包含QML代码文件的目录     C.JavaScript代码文件 格式如下: import Namespace Ver

QT开发(五十五)———Qt Quick Controls

QT开发(五十五)---Qt Quick Controls 一.Qt Quick Controls基础 QT5.1发布了Qt Quick的一个全新模块:Qt Quick Controls.Qt Quick Controls模块提供了大量类似Qt Widgets模块的可重用组件. 为了开发基于Qt Quick Controls的程序,需要创建一个Qt Quick Application类型的应用程序,选择组件集的时候注意选择Qt Quick Controls. 二.Qt Quick Control

QT开发(五十四)———QML组件

QT开发(五十四)---QML组件 QML组件是由基本元素组合成的一个复杂的可重用的组合元素.QML 提供了多种方法来创建组件. 基于文件的组件将QML元素放置在一个单独的文件中,然后给文件一个名字,可以通过名字来使用组件.如果有一个文件名为Cell.qml,就可以在QML中使用Cell { - }形式.自定义组件的文件名的首字母必须大写. Cell.qml文件: import QtQuick 2.0   Item {     id: container     property alias c

QT开发(五十)——QT串口编程基础

QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要参数如下: A.波特率:衡量通信速度的参数,表示每秒钟传送的bit的个数.例如9600波特表示每秒钟发送9600个bit. B.数据位:衡量通信中实际数据位的参数,当计算机发送一个信息包,实际包含的有效数据位个数. C.停止位:用于表示单个包的最后一位.典型的值为1和2位. D.奇偶校验位:串口通信

QT开发(五)——窗口组件和窗口类型

QT开发(五)--窗口组件和窗口类型 一.窗口组件 图形用户界面由不同的窗口和窗口组件构成,<QtGui>头文件包含窗口组件,对应QT中的GUI模块,QT以组件对象的方式构建GUI. 组件的类型: A.容器类(父组件)用来包含其他的界面组件 B.功能类(子组件)用于实现特定的交互功能 QT中没有父组件的顶级组件叫窗口. QWidget是容器组件,继承自QObject类和QPaintDevice类,QObject类是所有支持QT对象模型的基类,QPaintDevice类是QT中所有可绘制组件的基

【大话QT之十五】ctkPluginFrameWork插件系统Windows下编译

使用ctkPluginFramework作为插件系统框架的确有着众多开发上的优势.最近收到一些站内信,大家都想使用ctkPluginFramework但是不知道如何编译,这篇教程就来讲一讲ctkPluginFramework插件系统在Windows下的编译过程. 准备条件: 1. 安装Git,我们通过它来下载CTK的源码. 2. 安装CMake,我们用它来生成vs下的sln解决方案文件. 相关站点: 1. CTK的官网:http://www.commontk.org/index.php/Main

QT开发(五十三)———QML基本元素

QT开发(五十三)---QML基本元素 一.基本可视化项 可视元素具有几何坐标,会在屏幕上占据一块显示区域. Item             基本的项元素,所有可视化项都继承Item Rectangle        基本的可视化矩形元素 Gradient         定义一个两种颜色的渐变过程 GradientStop     定义个颜色,被Gradient使用 Image         在场景中使用位图 BorderImage     (特殊的项) 定义一张图片并当做边界 Anima

QT开发(五十一)——QtQuick基础

QT开发(五十一)--QtQuick基础 一.QtQuick简介 QT提供了两种独立的方法创建用户界面. QtQuick模块为创建流畅.鲜活的用户界面提供了一种标记语言.QtQuick模块适合需要动画元素的界面,以及应用程序主要运行在小屏幕和多点触控的设备上的场景. QtWidgets模块针对传统桌面提供了更多的支持,和目标平台做了更多的集成,无论目标平台是MacOSX.Windows.KDE.GNome.QtWidgets是一个非常高效的基于C++的类库,包含很多常见的用户界面组件,可以非常容

Java微信公众平台开发(十五)--微信JSSDK的使用

转自:http://www.cuiyongzhi.com/post/63.html 在前面的文章中有介绍到我们在微信web开发过程中常常用到的 [微信JSSDK中Config配置] ,但是我们在真正的使用中我们不仅仅只是为了配置Config而已,而是要在我们的项目中真正去使用微信JS-SDK给我们带来便捷,那么这里我们就简述如何在微信web开发中使用必要的方法!微信的JS-SDk中为我们提供的方法很多,这里我有一个简单截图如下: 在上图的提供的所有口中我们可以按照接口实现的难易程度分成两个部分:

python运维开发(十五)----scripts

内容目录: HTML补充 javascript HTML补充 1.display标签 display的inline-block 属性会自动带3px的宽度 <span style="display: inline-block;width: 80px;height: 50px;background-color: #00a2ca"> </span> <span style="display: inline-block;width: 80px;heigh