zoukankan      html  css  js  c++  java
  • 初识Qt图片显示、平移及旋转

    1、新建一个Qt Gui应用,项目名称为myPicture,基类选择为QMainWindow,类名设置为MainWindow。

    2、在mainwindow.h头文件中添加void paintEvent(QPaintEvent *);绘图事件函数

    3、在mainwindow.cpp文件中添加如下代码段,同时头文件中添加#include<QPainter>

     1 void MainWindow::paintEvent(QPaintEvent *)
     2 {
     3 
     4         QPainter painter(this);
     5         QPixmap pix;
     6         pix.load("../myPicture/top.png");//将图片置于项目的根目录
     7         //图一
     8         painter.drawPixmap(0, 0, 22, 22, pix);//图片尺寸22乘以22,设置大小不一样的话,图片会自动伸缩
     9         //图二
    10         painter.translate(100, 100); //将(100, 100)设为坐标原点
    11         painter.drawPixmap(0, 0, 22, 22, pix);//图片以(100, 100)为原点
    12         //图三
    13         qreal width = pix.width(); //获得以前图片的宽
    14         qreal height = pix.height();//获得以前图片的高
    15         pix = pix.scaled(width*2, height*2, Qt::KeepAspectRatio);//将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值不变
    16         painter.drawPixmap(20, 20,pix);//继续以前面设置好的(100, 100)为坐标原点
    17         //图四
    18         painter.translate(100, 100); //再次设置新的(100,100)为坐标原点,相对于最开始的坐标原点(0, 0)来说,此处相当于(200, 200)
    19         painter.rotate(180); //顺时针旋转90度
    20         painter.drawPixmap(0, 0, 22, 22, pix);//注意此处的坐标要写成(0, 0),即在新坐标原点放置旋转后的图片
    21         //图五
    22         painter.shear(0.5, 0.1); //横向扭曲0.5,纵向扭曲0.1,值越大,扭曲程度越大
    23         painter.drawPixmap(-50, -50, 22, 22, pix);//前面设置的反转属性没有更改,实际是将整个坐标系进行了180度反转,因此,向右下方移动为负x负y
    24         //图六
    25         painter.shear(-0.5, -0.1); //若想后面的图形不再扭曲,要进行前面扭曲的相反设置
    26         painter.drawPixmap(-100, -80, 22, 22, pix);//
    27 }

    4、运行结果显示如下 

    附:图片伸缩后的宽高设置属性

    其中:IgnoreAspectRatio:图片宽高比适应给定好的矩形大小

         KeepAspectRatio:在给定的矩形中,保持图片宽高比前后不发生变化

         KeepAspectRatioByExpanding:图片宽高比保持不变,但可能超出矩形大小

    Qt::IgnoreAspectRatio是不保持图片的宽高比,Qt::KeepAspectRatio是在给定的矩形中保持宽高比,最后一个也是保持宽高比,但可能超出给定的矩形。

  • 相关阅读:
    小程序开发-7-访问api数据与ES6在小程序中的应用
    小程序开发-8-流行页面编码与组件的细节知识
    小程序开发-6-组件数据、事件与属性
    当安装mongodb客户端出现了Failed to load list of databases
    对bluebird的理解
    百度地图实现案例
    iScroll实现下拉刷新上拉加载
    nodejs环境变量配置
    检测Python程序本身是否已经在运行
    用Python快速找到出现次数最多的数据
  • 原文地址:https://www.cnblogs.com/peter-czhang/p/3380881.html
Copyright © 2011-2022 走看看