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); 
    }

    效果如下

  • 相关阅读:
    动态规划——Best Time to Buy and Sell Stock IV
    动态规划——Split Array Largest Sum
    动态规划——Burst Ballons
    动态规划——Best Time to Buy and Sell Stock III
    动态规划——Edit Distance
    动态规划——Longest Valid Parentheses
    动态规划——Valid Permutations for DI Sequence
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3018551.html
Copyright © 2011-2022 走看看