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

这篇具有很好参考价值的文章主要介绍了全网最全!!Qt实现图片旋转及图片旋转动画的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现图片旋转的两种方式

第一种方案

使用 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 实现图片旋转的两种方法 - 走看看 文章来源地址https://www.toymoban.com/news/detail-505139.html

到了这里,关于全网最全!!Qt实现图片旋转及图片旋转动画的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 多线程的几种实现方式

    Qt多线程的实现方式有: 1. 继承QThread类,重写run()方法 2. 使用moveToThread将一个继承QObject的子类移至线程,内部槽函数均在线程中执行 3. 使用QThreadPool,搭配QRunnable(线程池) 4. 使用QtConcurrent(线程池) 为什么要用线程池? 创建和销毁线程需要和OS交互,少量线程影响不大,

    2024年02月15日
    浏览(30)
  • CSS实现图片放大缩小的几种方法

    参考 常用使用img标签,制定width或者height的任意一个,图片会自动等比例缩小 但是不知道为什么我在uniapp小程序中这样写并没有等比缩小 使用CSS3新属性,transform的scale 大于1: 放大 小于1: 缩小 使用背景图设置图片 https://www.runoob.com/cssref/css3-pr-background.html

    2024年01月19日
    浏览(57)
  • flutter 中的动画详解 全网最全 动画一篇搞定 一万四千字

    学习 Flutter 中的动画和过渡是构建流畅用户界面的关键部分之一。这里我整理了一个主要的学习路径,可以帮助你逐步掌握 Flutter 中的动画和过渡技术,希望能够帮助到你 开始之前,了解一些基本的动画和过渡概念是很重要的。学习什么是动画、过渡,以及它们在用户体验中

    2024年01月18日
    浏览(30)
  • 【Qt专栏】实现单例程序,禁止程序多开的几种方式

    目录 一,简要介绍 二,实现示例(Windows) 1.使用系统级别的互斥机制 2.通过共享内存(进程间通信-IPC) 3.使用命名互斥锁(不推荐) 4.使用文件锁 5.通过网络端口检测 前言 禁止程序多开,也称为“单实例应用程序”或“单例应用程序”,是指通过各种手段防止同一个应用

    2024年02月10日
    浏览(43)
  • OpenCV旋转图像的几种方法

    我们在工作中用摄像头去拍摄目标的时候,是没有办法保证这个摄像头肯定是水平的,所以拍下来的图像肯定是有点歪的。我们在用opencv导入图片的时候,首先要对这个图片进行旋转,把它调整到一个标准的位置。 参考链接: OpenCV 101例_哔哩哔哩_bilibili

    2024年02月14日
    浏览(27)
  • svg动画的几种方式

    最近在做的项目中有部分的svg需要做成动画,最开始的想法是转成gif,然后一看,啊,90M!!!实在不能忍,于是和设计妹纸一起研究起了svg动画,发现这玩意儿还是很好玩的,怎么让svg动起来,这是一个很有趣的话题。在目前的开发过程中,一共使用了三种方式,接下来就

    2024年02月14日
    浏览(30)
  • QT使用QAxObject读取Excel教程-全网最全

    QT中没有操作Excel的官方库,本文章介绍的是Windows系统的ActiveX对象(QAxObject)操作Excel。 当然还有一些开源库可以用来操作Excel,详见:Qt处理Excel的一些库 本文只对QAxObject读取Excel作说明。 首先,我们先来解释一些概念,方面我们去理解Qt操作excel的基本流程。 Qt中,QAxObject对

    2024年02月15日
    浏览(31)
  • Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播

     程序示例精选 Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播 如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助! 这篇博客针对Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播编写代码,代码整洁,规则,易读。 学习与应用推荐首

    2024年02月13日
    浏览(25)
  • Vue显示图片的几种方式

    最近在做自己的项目,有这么一个需求,用户列表需要展示用户的头像,之前一直没有处理,趁着这次机会,正好分享下我的解决过程。 头像这一栏空荡荡的,我这种强迫症患者难受死! 首先声明下,我的数据列表是查询数据库接口返回的,那么我头像路径也是保存在数据

    2024年01月21日
    浏览(28)
  • 【QT深入理解】QT中的几种常用的排序函数

    排序函数是一种在编程中常用的函数,它可以对一个序列(如数组,列表,向量等)中的元素进行排序,使其按照一定的顺序排列。排序函数可以根据不同的排序算法,如冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序等,实现不同的排序效果。排序函数的作

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包