实现图片旋转的两种方式

第一种方案

使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下:

QMatrix matrix;
matrix.rotate(45);QLabel *Label= new QLabel();
Label->setPixmap(QPixmap(“:/images.png”).transformed(matrix, Qt::SmoothTransformation));

第二种方案

使用 QPainter 这位“画家”,示例程序如下:

void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);QPixmap disc(":/disc.png");/* 设定旋转中心点 */painter.translate(130,150);/* 旋转的角度 */painter.rotate(45);/* 恢复中心点 */painter.translate(-130,-150);/* 画图操作 */painter.drawPixmap(40,60,180,180, disc);
}

实现图片旋转动画的两种方式:

一、借助QPixmap实现旋转动画

QMatrix matrix;matrix.rotate(angle);if(angle++ ==360)angle = 0;
//设定图片的大小;QImage Image = QImage(":/images/cd.png");QPixmap pixmap = QPixmap::fromImage(Image);QPixmap fixpixmap = pixmap.scaled(320,320,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);QLabel *Label= new QLabel();label[1]->setPixmap((fixpixmap).transformed(matrix,Qt::SmoothTransformation));label[1]->setAlignment(Qt::AlignCenter);

第二种方案

使用 QPainter 这位“画家”,示例程序如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{disc = QPixmap(":/cd.png");timer = new QTimer();timer->start(10);connect(timer,SIGNAL(timeout()),this,SLOT(timerTimeOut()));
}void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);/* 碟机转动 */if(angle++ == 360)angle = 0;/* 设定旋转中心点 */painter.translate(disc.width()/2,disc.height()/2);/* 旋转的角度 */painter.rotate(angle);/* 恢复中心点 */painter.translate(-disc.width()/2,-disc.height()/2);/* 画图操作 */painter.drawPixmap(0,0,disc.width(),disc.height(), disc);
}void MainWindow::timerTimeOut()
{/* 当界面初始化或者需要刷新时才会执行paintEvent */update();
}

使旋转动画始终处于窗口中心:

void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing| QPainter::SmoothPixmapTransform);/* 碟机转动 */if(angle++ == 360)angle = 0;
//设定旋转中心点/* QRectF 即,继承 QRect(Qt 的矩形类), F 代表精确到浮点类型 */QRect rect((this-> width() - disc.width()) / 2,(this-> height() - disc.height()) / 2,disc.width(),disc.height());/* 默认参考点为左上角原点(0,0),因为旋转需要以图形的中心为参考点,* 我们使用 translate 把参考点设置为 CD 图形的中心点坐标 */painter.translate(0 + rect.x() + rect.width() / 2,0 + rect.y() + rect.height() / 2);/* 旋转的角度 */painter.rotate(angle);
//恢复中心点;/* 现在参考点为 CD 图形的中心,我们需要把它设置回原点的位置,* 所以需要减去上面加上的数 即将绘图的起点设置回起点*/painter.translate(0 - (rect.x() + rect.width() / 2),0 - (rect.y() + rect.height() / 2));
//画图操作/* 画图,QPainter 提供了许多 drawX 的方法 */painter.drawPixmap(rect,disc);
}

最终效果:

参考:QT 实现图片旋转的两种方法 - 走看看

全网最全!!Qt实现图片旋转及图片旋转动画的几种方式相关推荐

  1. Express全系列教程之(四):获取Post参数的两种方式

    一.关于POST请求 post方法作为http请求很重要的一部分,几乎所有的网站都有用到它,与get不同,post请求更像是在服务器上做修改操作,它一般用于数据资源的更新. 相比于get请求,post ...

  2. Qt for Android / ios 将图片或文件打包进安装包中

    概述 用 Qt 做程序开发,图片或翻译文件的引用有两种方式,一种是直接引用,本地图片, 一种是编译到资源文件中,其实直接添加在资源文件中是最方便的,不需要考虑文件存放的问题,但是这样可能带来的问题是启 ...

  3. Android实现加载(loading)图片旋转的三种方式

    我们在Android应用开发中可能经常用到类似如下效果的加载过程中的图片旋转效果: 上面的图片是一张gif格式的动态图片,我们知道,在Android中对gif动态图片的支持是不好的.可以通过第三方ja ...

  4. ImGui添加背景图片的两种方式

    给ImGui添加背景图片的两种方式 最近在使用ImGui做客户端程序,想给窗口添加背景图片,但是作者的文档里面好像并没有讲如何添加背景图片,研究了下找到了两种方式. 第一种 创建一个和窗口一样大的Im ...

  5. 图片去水印神器-图片免费去水印app神器

    每次刷朋友圈时都能看到有些配图,经过几次传播,上面覆盖了十几个水印,实在是不太好看. 现在很多从网上保存的图片都带着水印,裁剪掉又会影响图片的整体性. 如果是需要保持图片完整度,并且批量处理多张图片, ...

  6. hugo 导入图片,两种方式

    本人的hugo示例图片演示站点 引入图片的关键是:图片的绝对路径与相对路径 第一种方式:(图片资源放置在根目录下的static下,也就是网站的绝对路径) 图片存放位置 引入图片的markdown代码 ...

  7. 全网最全免费图片素材下载网站

    1.Unsplash UnSplash坚持每天分享高清的摄影图片,每天更新一张高质量的图片素材,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸也可以应用于各种需要的环境,非常值得收藏. 链接 ...

  8. 全网最全的Qt下载途径(多种下载通道+所有版本)

    本文转载自:http://c.biancheng.net/view/3851.html Qt 体积很大,有 1GB~3GB,官方下载通道非常慢,相信很多读者会崩溃,所以建议大家使用国内的镜像网站(较快 ...

  9. 【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现

    全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...

最新文章

  1. 下载MySQL数据库
  2. 使用html格式,通过php调用数据库并显示数据
  3. 收款神器!解读聚合收款码背后的原理,你都知道吗?
  4. 一分钟关闭百度的搜索热点和相关人物
  5. python牛顿法解非线性方程组_萌新请教牛顿法求解三元非线性方程组
  6. 专升本c语言名词解释题_福建普通高校专升本各类别考试题型及分值
  7. 使用Yii2中dropdownlist实现地区三级联动的例子
  8. WPF开发时光之痕日记本(一)——富文本编辑器
  9. 画出清明上河图的代码_制作阴影立体动态图文图的代码【清明上河图】
  10. SOUI::SStatic 动态设置属性的值
  11. 4078. 成绩表里找同学
  12. Sprite和Texture的区别
  13. Python序列 数据类型 创建方式 Tuple元组 Str字符串 List列表 dict字典 Set集合 range,zip,map,enumerate
  14. Ubuntu18.04之lightdm取代gdm
  15. 【Kotlin入门教程】史上最全最易于理解最全面的文章
  16. 新版Jenkins关闭CSRF“HTTP ERROR 403 No valid crumb was included in the request“
  17. 基于python SMTP实现自动发送邮件教程解析
  18. java 函数式接口与Lambda表达式
  19. Get传递参数时发生java.lang.IllegalArgumentException异常
  20. C语言练习2-14 求奇数分之一序列前N项和

热门文章

  1. vscode python jieba 词频统计
  2. 互联网金融P2P网贷【自认为比较靠谱的公司】
  3. 北京筑龙胡婧玥:采购供应链的数字化转型之路
  4. php设置对ws的请求不拦截,phpsocket服务端能不能在网页端开启?而不是只能用CLI模式开启...
  5. 自动生成 MultiTestManager 的执行文件mtm
  6. Pango-ERROR **: 15:31:09.214: Harfbuzz version too old (1.4.2)解决
  7. 适用于ESXi上黑群晖DSM6.2.X最简单的安装方法
  8. lucene java 庖丁解牛_Lucene3.3、Lucene3.4中文分词——庖丁解牛分词实例
  9. 如何使用PS制作橙色高光壁纸
  10. 解决会声会影x9关闭后UEIP.dll找不到指定模块的方法