(三)Qlabel显示图片

  • Post author:
  • Post category:其他


在(一)QT学习中,我们说过label这个控件是可以显示图片的,那么这篇让我们看下如何显示图片:

首先让我们创建一个项目picture,为项目布置上对应的控件label。让图片显示在label上:

代码很简单,如下

    QLabel *abel=new QLabel();
    QImage *img=new QImage;
    img->load("F:\\tupian\\image.jpg");
    ui->label->setPixmap(QPixmap::fromImage(*img));

但是你会发现,这样的载入方式,能加载的图片类型是很少的,例如百度上下载的.jfif(JPEG格式)无法加载。那么想加载其他类型的图片该如何处理呢

    QPixmap *pixmap = new QPixmap("F:\\timg.jfif");
    pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->label->setScaledContents(true);
    ui->label->setPixmap(*pixmap);

当然你也可以读取图片的二进制数据,再加载图片,例如这篇文章可以参考:https://cloud.tencent.com/developer/article/1601595

在这里插入图片描述

另外以上加载的图片,都是图片适应label的大小,因为实际情况是:页面一般是固定的,只能图片适应控件大小。如果想控件适应图片大小呢,可以这么操作:

    QImage image;
    image.load("F:\\timg.jfif");
    ui->label->setPixmap(QPixmap::fromImage(image));
    ui->label->resize(QSize(image.width(),image.height()));

这么做是有风险的,因为你需要控制图片的大小,否则会出现只加载图片的一部分(因为窗口大小是有限的,而无关label大小),即显示不全。

在这里插入图片描述

在项目中,如果我们需要传输图片作为验证码图片,可以考虑SVG图片,这种图片可以任意缩放,并且它的文本和图像是相互独立的,即你可以任意指定文字字体、文字大小写等,服务器可以很方便的变换验证码文字,而不需要变换图片;客户端也可以任意缩放图片大小,不会影响图片质量。

例如登陆界面(做的粗糙,有需要的自己调整大小即可):

在这里插入图片描述

label加载的代码:

    QPixmap *pixmap = new QPixmap("D:\\method-draw-image.svg");
    pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->label_picture->setScaledContents(true);
    ui->label_picture->setPixmap(*pixmap);



版权声明:本文为sunatmine原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。