zoukankan      html  css  js  c++  java
  • QPixmap显示图片

    现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲。这里我们是利用QPixmap类来实现图片显示的。

    一、利用QPixmap显示图片。

    1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(以前已经说过,经常备份工程目录,是个很好的习惯)

    2.在工程文件夹的debug文件夹中新建文件夹,我这里命名为images,用来存放要用的图片。我这里放了一张linux.jpg的图片。如下图所示。

     

     

    4.将dialog.cpp文件中的paintEvent()函数更改如下。

    void Dialog::paintEvent(QPaintEvent *)
     {     
    QPainter painter(this);     
    QPixmap pix;     
    pix.load(“images/linux.jpg”);     
    painter.drawPixmap(0,0,100,100,pix); 
    }

    (说明:下面的操作都会和坐标有关,这里请先进行操作,我们在下一节将会讲解坐标系统。)

    二、利用更改坐标原点实现平移。

    Qpainter类中的translate()函数实现坐标原点的改变,改变原点后,此点将会成为新的原点(0,0);

    例如:

     

    void Dialog::paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
        QPixmap pix;
        pix.load(“images/linux.jpg”);
        painter.drawPixmap(0,0,100,100,pix);
        painter.translate(100,100); //将(100,100)设为坐标原点
        painter.drawPixmap(0,0,100,100,pix);
    }

    这里将(100,100)设置为了新的坐标原点,所以下面在(0,0)点贴图,就相当于在以前的(100,100)点贴图。效果如下。

    三、实现图片的缩放。

    我们可以使用QPixmap类中的scaled()函数来实现图片的放大和缩小。

    例如:

    void Dialog::paintEvent(QPaintEvent *) 
    {
    QPainter painter(this);
    QPixmap pix;
    pix.load(“images/linux.jpg”);
    painter.drawPixmap(0,0,100,100,pix); qreal width = pix.width(); //获得以前图片的宽和高 qreal height = pix.height(); pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);
    //将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值 painter.drawPixmap(100,100,pix); }

    四、实现图片的旋转。

    旋转使用的是QPainter类的rotate()函数,它默认是以原点为中心进行旋转的。我们要改变旋转的中心,可以使用前面讲到的translate()函数完成。

    例如:

    void Dialog::paintEvent(QPaintEvent *) 
    {     QPainter painter(this);    
     QPixmap pix;     
    pix.load(“images/linux.jpg”);    
     painter.translate(50,50); //让图片的中心作为旋转的中心    
     painter.rotate(90); //顺时针旋转90度     
    painter.translate(-50,-50); //使原点复原     
    painter.drawPixmap(0,0,100,100,pix); 
    }

    这里必须先改变旋转中心,然后再旋转,然后再将原点复原,才能达到想要的效果。

    运行程序,效果如下。

    五、实现图片的扭曲。

    实现图片的扭曲,是使用的QPainter类的shear(qreal sh,qreal sv)函数完成的。它有两个参数,前面的参数实现横行变形,后面的参数实现纵向变形。当它们的值为0时,表示不扭曲。

    例如:

    void Dialog::paintEvent(QPaintEvent *) 
    {     
    QPainter painter(this);     
    QPixmap pix;     
    pix.load(“images/linux.jpg”);     
    painter.drawPixmap(0,0,100,100,pix);     
    painter.shear(0.5,0); //横向扭曲    
     painter.drawPixmap(100,0,100,100,pix); 
    }

    效果如下

  • 相关阅读:
    vuecli 4使用report分析vendor.js
    vue使用 NProgress 浏览器顶部进度条
    vue项目中 configureWebpack 与 chainWebpack的区别及配置方式
    vue 项目中报错 Error: Avoided redundant navigation to current location: “/xxx”. 的解决方案
    npm中的savedev和save的区别
    vuecli 4 使用scss (配置全局scss变量)
    css如何修改滚动条样式
    vue 项目http://localhost:8080/sockjsnode/info?t=1556418283950 net:: ERR_CONNECTION_REFUSED
    java类的加载时机
    android中屏蔽键盘的2种方法
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3018551.html
Copyright © 2011-2022 走看看