我们在QT中加载图片一般都是将图片加载在一个label中显示,当我们想让这个label旋转时,就会出现问题,因为控件在不重写的情况下,基本旋转不了,我们只能去旋转label中的图片,达到旋转控件的效果,在网上查了很多资料但是很少有人能把写完整的,所以在这里记录下自己遇到这些问题时的一些心得吧。

首先,我们了解一下QMatrix的知识。

QPainter预设的座标系统是绘图装置的座标系统,也就是左上角为原点,向右为正X,向下为正Y的座标系统,座标系统的转换常使用矩阵的方式来表现及进行运算, QMatrix的作用,正是让您可以利用其内建的矩阵,设定好相关的参数,然后让QPainter根据QMatrix的设定,来进行一些二维座标系统的转换动作。

QMatrix的内部使用一个3x3的矩阵:

m11

m12

0

m21

m22

0

dx

dy

1

dx与dy定义了水平与垂直移动,m11与m22定义了水平与垂直缩放(scaling),m12与m21定义了垂直与水平扭曲(shearing),想像您是坐在太空船中,在太空船从左上原点开到某个点之后,(x, y)是以您为中心所看到的座标,但实际上太空船相对于左上角为原点的座标为(x', y'),QMatrix的矩阵可以如以下的公式,将(x, y)转换为(x', y'):

x' = m11*x + m21*y + dx 
y' = m22*y + m12*x + dy

当您使用QPainter要进行绘图时,可以您为中心所看到的座标系统(x, y),使用QPainter的相关API来进行相关图形的绘制,这就像您在太空船中画图一样的方便,若有设定QMatrix,则会自动转换为电脑绘图时所看到的座标系统(x', y'),如此就不用亲自进行一些复杂的转换动作,进行绘图时也较为直觉。

我的程序是利用QMatrix的函数做的旋转。具体调用如下:

void myRotate()

{
    //要旋转的图片
    QPixmap src_pix;
    //旋转角度
    int nDegree;
    //中心点
    int centre_x;
    int centre_y;
    QMatrix mat;
    //设置旋转图片时的中心点
    mat.translate(centre_x, centre_y);
    //设置图片旋转角度
    mat.rotate(nDegree);
    //将图片旋转中心点放回图片的左上角
    mat.translate(-centre_x, -centre_y);
    //新建一张图片,并设置背景透明
    QPixmap new_pix;
    new_pix.fill(Qt::transparent);  //设置透明
    new_pix = src_pix.transformed(mat, Qt::SmoothTransformation);
    //在图片画线
    Qpainter paint(&new_pix);
    //选择画笔
    QPen pen(Qt::red, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
    //起始点 和 终点
    QPoint start_pt, end_pt;
    paint.drawLine(start_pt, end_pt);
}
    看到这里是不是觉得跟网上你查到的内容都是一样的,并没有不一样的地方,其实差别在我们设置的label属性上,如果我们设置label的scaledContents属性,图片会在label上做一些延伸,导致我们旋转图片时,图片会失帧变形,如果想保证图片不失帧不变形的旋转,我们就不要勾选scaledContens这个属性,将label和图片的宽高度一个属性设置为一样的值,旋转是以图片的中心点去旋转,这样就可以保证图片正常旋转。

后续会提供相应的例子供大家参考。

 

关于Qt旋转图片的一些说明相关推荐

  1. 全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

    实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; ...

  2. HTML5 3D旋转图片相册

    H5旋转3D相册,鼠标放置暂停,图片灰度级为0,有放大效果. 该实例运用H5和CSS3动画效果,未用javascript.提高了本人对CSS3 新属性的了解及掌握. 完整代码如下: <!DOCT ...

  3. 小猿圈web前端之移动端Vue+Vant实现上传压缩旋转图片功能

    小猿圈web前端讲师为了大家更好的学习前端知识决定每天分享一个web前端案例,希望对你与学习前端的你有所帮助,今天分享的是移动端Vue+Vant的Uploader实现上传.压缩.旋转图片等功能的详细介 ...

  4. css和js实现3d图片,JavaScript_纯JS实现旋转图片3D展示效果,CSS:style type=text/cssgt - phpStudy...

    纯JS实现旋转图片3D展示效果 CSS: #show{position:relative;margin:20px auto;width:800px;} .item{position:absolute; ...

  5. QT旋转按钮控件的实现

    目录 一.实现需求:鼠标hover时旋转 二.实现方式:计时器做动画 三.代码实现 QT旋转按钮控件的实现 一.实现需求:鼠标hover时旋转 需求是:实现类似于WINDOWS下,某些软件窗口关闭按钮 ...

  6. Qt Creator图片

    Qt Creator图片 图片 图片大小 来源大小 图像对齐 表现 边框图片 动画图像 图片 图像类型用于以几种受支持的格式将图像添加到UI,包括位图格式(例如PNG和JPEG)和矢量图形格式(例如S ...

  7. 360度旋转图片小特效

    现在,在这个网络发达的时代,一些电子商务公司,需要将自己线上的产品给买家或用户看,为了能让用户了解的更全面,那么把一个物件的产品要展示到方方面面,就要运用到360度旋转图片特效,因为上次有朋友叫我帮她 ...

  8. ios新手开发——toast提示和旋转图片加载框

    不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经 ...

  9. php 图片 3d旋转图片,html5实现图片的3D旋转效果

    我们先来看一下实现效果: (学习视频分享:html视频教程) H5旋转3D相册,鼠标放置暂停,图片灰度级为0,有放大效果. 该实例运用H5和CSS3动画效果,未用javascript.提高了本人对CS ...

最新文章

  1. pg数据库与MySQL的count函数_postgresql数据库连接数和状态查询操作
  2. 成功解决You are using pip version 9.0.3, however version 10.0.1 is available. You should consider upgr
  3. 在windows下安装PyPdf2
  4. 从最基础的讲起如何做到均匀的生成随机数
  5. Istio 2020 年 Roadmap——一切为了商用
  6. 1107: 回文数猜想(函数专题)
  7. Razor视图引擎-基础语法
  8. python读取excel绘图y轴设置_python读取并定位excel数据坐标系详解
  9. bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠
  10. wind7计算机控制面板在哪,联想win7系统控制面板在哪里打开
  11. 2020牛客多校九J-The Escape Plan of Groundhog
  12. 调试的时候没有在断点处停止的原因
  13. 互联网巨头常用词汇大全 每一个词都在改变世界
  14. DNSPod十问陈迪菲:从C到B,鹅厂设计师的中场战事
  15. oracle-1480,1400,1438错误一些解决方式
  16. 360兼容性问题:教资报名请使用搜狗浏览器(兼容模式)、360浏览器(兼容模式)、QQ浏览器(内核模式请选择:总是使用IE内核)、IE系列浏览器。
  17. 前端生成二维码及把页面转为图片保存到本地
  18. 笔记本玩梦幻西游开启时自动全屏,而且两边还有黑边!
  19. 有特别有创意的网站设计案例
  20. 软件定义的容错计算机体系,1.4 软件容错技术 - 计算机系统容错技术方法

热门文章

  1. 关于NX二次开发嵌入MFC的相关入门
  2. MySQL新参数log_error_verbosity
  3. python中文件的相关操作和函数
  4. 怎样用FileZilla连接Windows服务器
  5. 计算机显微视觉相关概念,显微视觉测量与控制
  6. 自主可控计算机扯的重要性,2019自主可控计算机大会在京召开
  7. Python的复制、浅拷贝、深拷贝区别和代码说明
  8. python 爬虫爬取网易新闻 网易排行榜
  9. 华为OD机试(JAVA)真题 -- 翻转英文
  10. 【Windows问题】:在IDE代码补全时解决与Windows下的ctrl+空格切换输入法快捷键冲突问题