Qt之图形(转换)
简述
QTransform类指定坐标系的2D转换,可以指定平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。
QTransform与QMatrix的不同之处在于,它是一个真正的3x3矩阵,允许视角转换,QTransform的 toAffine()方法允许将QTransform转换到QMatrix。如果视角转换已在矩阵指定,则转换将导致数据丢失。
常用接口
| 函数 | 描述 |
|---|---|
| translate(qreal dx, qreal dy) | 平移-对坐标系沿着x轴移动dx、沿y轴移动dy |
| scale(qreal sx, qreal sy) | 缩放-通过水平的sx和垂直的sy缩放坐标系 |
| rotate(qreal angle, Qt::Axis axis = Qt::ZAxis) | 旋转-对指定的轴用给定的角度反时针旋转坐标系统 |
| shear(qreal sh, qreal sv) | 扭曲-通过水平的sh和垂直的sv扭曲坐标系 |
| reset() | 重置为单位矩阵 |
正常
我们先来看正常情况下的效果。
效果
源码
这里,我们绘制了一张从坐标原点开始,长度、宽度均为150的图片。
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// 反走样
painter.setRenderHint(QPainter::Antialiasing, true);
painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}
平移
效果
源码
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// 反走样
painter.setRenderHint(QPainter::Antialiasing, true);
QTransform transform;
// 平移
transform.translate(120, 20);
painter.setTransform(transform);
painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}
translate()可以将坐标原点变更为指定的x、y坐标。这里,将坐标原点由(0, 0)变为(120, 20)。
旋转
效果
| Qt::XAxis | Qt::YAxis | Qt::ZAxis |
|---|---|---|
源码
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// 反走样
painter.setRenderHint(QPainter::Antialiasing, true);
QTransform transform;
// 平移
transform.translate(120, 20);
// 旋转
transform.rotate(45, Qt::XAxis);
painter.setTransform(transform);
painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}
rotate()使用角度技巧表示远近。设置第二个参数为角度的常量值后,可以使用X轴、Y轴、Z轴技巧。它默认是以原点为中心进行旋转的,如果要改变旋转的中心,可以使用translate()函数完成。
缩放
效果
源码
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// 反走样
painter.setRenderHint(QPainter::Antialiasing, true);
QTransform transform;
// 平移
transform.translate(120, 20);
// 旋转
transform.rotate(45);
// 缩放
transform.scale(0.5, 0.5);
painter.setTransform(transform);
painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}
scale()可以进行缩放。这里,使绘制的图像缩小到原来的一半。
扭曲
效果
源码
void MainWindow::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// 反走样
painter.setRenderHint(QPainter::Antialiasing, true);
QTransform transform;
// 横向扭曲
transform.shear(0.5, 0);
painter.setTransform(transform);
painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}
shear()可以实现图片的扭曲。它有两个参数,前面的参数实现横向变形,后面的参数实现纵向变形。当它们的值为0时,表示不扭曲。
Qt之图形(转换)的更多相关文章
- QT 基本图形绘制
QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿 QPainter::TextAntialiasing 在可能的情况下,文 ...
- Qt之图形视图框架
简述 图形视图(Graphics View)提供了一个平台,用于大量自定义2D图元的管理与交互,并提供了一个视图部件(view widget)来显示可以缩放和旋转的图元. 框架包括一个事件传播架构,支 ...
- Qt之图形(QPainterPath)
简述 QPainterPath 类(绘图路径)提供了一个容器,用于绘图操作,可以创建和重用图形形状. 绘图路径是由许多图形化的构建块组成的对象,例如:矩形.椭圆.直线和曲线.构建块可以加入在封闭的子路 ...
- Qt之图形(绘制文本)
简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPaint ...
- 使用Qt 开发图形界面的软件
3DSlicer, a free open source software for visualization and medical image computing AcetoneISO:镜像文件挂 ...
- 使用Qt 开发图形界面的软件(尘中远)
3DSlicer, a free open source software for visualization and medical image computing AcetoneISO:镜像文件挂 ...
- QT 12 QTimage转换Mat
QImage cvMat2QImage(const cv::Mat& mat) { // 8-bits unsigned, NO. OF CHANNELS = 1 if(mat.type() ...
- Qt之图形(组合)
简述 使用QPainter绘制图形或者图像时,在重叠区域使用组合模式(Composition_mode).在绘图设备上通过组合模式使用QImage时,必须使用Format_ARGB32_Premult ...
- Qt之图形(简笔画-绘制卡通蚂蚁)
简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效 ...
随机推荐
- SpringBoot学习笔记(16)----SpringBoot整合Swagger2
Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...
- 我的Java历程_写出这个数
lzJava基础进行中,今天偶然间看到的一个题目: 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字.如下代码: import java.util.*;public class Ma ...
- Linux 设备驱动之 UIO 机制(基本概念)
一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logica ...
- [数位dp] bzoj 3209 花神的数论题
题意:中文题. 思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一. 统计的时候乘起来就好了. 代码: #include"cstdlib" #include"c ...
- jsp中对话框的实现
<Input type=submit name="g" style="font-size:20px" value="提交" oncli ...
- 集群环境下,Session管理的几种手段
集群环境下,Session管理的几种手段 1.Session复制 缺点:集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源. 由于所有用户的Session信息在每台服务器上都 ...
- spark 数据预处理 特征标准化 归一化模块
#We will also standardise our data as we have done so far when performing distance-based clustering. ...
- django 笔记9 分页知识整理
感谢老男孩 自定义分页 XSS:攻击 默认字符串返回 {{page_str|safe}} 前端 from django.utils.safestring import mark_safe page_s ...
- tomcat:Could not publish to the server. java.lang.IndexOutOfBoundsException
1.将工程加入到tomcat,报上述错误 2. run--maven build 报jar包错误: invalid LOC header (bad signature) 3.根据提示找到上述jar包, ...
- kafka集群安装配置
1.下载安装包 2.解压安装包 3.进入到kafka的config目录修改server.properties文件 进入后显示如下: 修改log.dirs,基本上大部分都是默认配置 kafka依赖zoo ...