zoukankan      html  css  js  c++  java
  • QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)

    QImage与QPixmap加载图片 效果 .

    分类: QT开发

    PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent)

    {
    this->setWindowTitle("deal picture");

    //表达1    此种情况也等同于不写  只有重新设置图片大小的时候才需要   eg:表达3
    //QPixmap pixmap;
    //pixmap.load("Picture.JPG");

    //表达2   样式表方法   只能填充部分
     this->setObjectName("myframe");
     this->setStyleSheet("QFrame#myframe{border-image:url(Picture.JPG)}" );
     this->setAutoFillBackground(true);


    //表达3    根据图片的大小来设定界面
     //QPixmap pixmap;    
     //pixmap.load("Picture.JPG");
     //resize(pixmap.size());  

    //表达4   palette方法  填充整个界面   会出现一个界面里有多张图片的效果 
    //QPixmap pixmap("Picture.JPG");
    //QPalette   palette;
    //palette.setBrush(this->backgroundRole(),QBrush(pixmap));
    //this->setPalette(palette);
    }

    void PixmapTest::paintEvent(QPaintEvent *event)
    {
     QPainter painter(this);
     painter.drawPixmap(0, 0, QPixmap("Picture.JPG"));

     }

    表达1、2运行效果如下:

    表达3的运行效果如下:

    表达4:运行效果

    ============================================================================================

    其中以下方法(Qlabel),也可以达到表达1、2的效果

    PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent)
    {
    this->setWindowTitle("deal picture");

    QPixmap pixmap;
    pixmap.load("Picture.JPG");
    label = new QLabel(this);
    label->setPixmap(pixmap);
    }

    ============================================================================================

    以上几种情况图片大小和界面大小都不是很匹配,有没有方法让图片自动扩展到整个界面呢?

    PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent)
    {
    this->setFixedSize(640,480);
    this->setWindowTitle("deal picture");

    }

    void PixmapTest::paintEvent(QPaintEvent *event)
    {
    QPainter painter(this);
    QPixmap pix;

    // 1 、2两句可以任选一句  也就是说QPixmap在load图片时,实际上就是将QImage转化为QPixmap过程
    pix.load("Picture.JPG");     // 1
    //pix = pix.fromImage(image);// 2
    painter.drawPixmap(0, 0, 640, 480, pix);
    }

    运行效果如下:

    但是如果paintEvent中的方法换为:

    void PixmapTest::paintEvent(QPaintEvent *event)
    {
    QPainter painter(this);
    QImage image;
    image.load("Picture.JPG");
    painter.drawImage(0, 0, image, 0, 0, 640, 480);  //注意大小仍然是界面大小哦

    }

    效果会如何呢?

    【综述】从上面可以看出QImage在加载图片时,图片不会根据界面的大小而改变,也就是说我们不能根据界面来拉伸和压缩图片;

    然而QPixmap在默认情况下,大小即为图片大小,但是它可以拉伸和压缩图片。。。

    ============================================================================================

    但是QPixmap和QImage在效果上有什么区别呢?

    void PixmapTest::paintEvent(QPaintEvent *event)
    {
    QPainter painter(this);
    QImage image;
    image.load("Picture.JPG");
    painter.drawImage(0, 0, image, 0, 0, 320, 480);//坐标(0,0),图片大小为(320,480)
    QPixmap pix;
    pix.load("Picture.JPG");
    //pix = pix.fromImage(image);
    painter.drawPixmap(320, 0, 320, 480, pix);//坐标(320,0),图片大小为(320,480)
    }

    效果正如我们想想的那样:

    http://blog.csdn.net/linpuliang/article/details/38725339

  • 相关阅读:
    一个弹框表单复用create,edit表单操作
    数组去重,防抖节流,渲染几万条数据不卡页面,32个手撕JS,彻底摆脱初级前端
    解决vue表单回显数据无法修改的问题
    正则
    将UTC时间转换为当地的时间
    Vue页面上实时显示当前时间,每秒更新
    互联网协议
    记录:批量重命名文件夹下的文件
    IdentityServer4 无法登录,一直跳转登录界面
    同解与等价
  • 原文地址:https://www.cnblogs.com/findumars/p/5861711.html
Copyright © 2011-2022 走看看