一.前言

Qt作为GUI图形库的选择之一,图片的显示也就尤为重要。例如背景的显示,icon的显示等等。这里我们来探讨一下Qt的几种图片显示方式和时间消耗。

二.Winows下图片显示

这里我们绘制一张1440*900的图片进行演示,演示硬件环境为:Win10 64位系统 + i3-8100 CPU
在这里插入图片描述

1.QPainter

这个作为Qt的基础绘画大师,能绘制各种规则不规则的图形,当然显示图片也不在话下。

 QPainter painter(this);
 painter.drawPixmap(this->rect(),QPixmap(":/timg.jpg"));

绘制耗时结果:47ms ,后面显示的0十是因为图片没有变化没有重新绘制。在这里插入图片描述

2.QPalette

  QPalette palett;
  palett.setBrush(QPalette::Background,QBrush(QPixmap(":/timg.jpg")));
  this->setPalette(palett);
  this->setAutoFillBackground(true);

绘制耗时结果:45ms
在这里插入图片描述

3.QLabel(QPixmap、stylesheet)

 //采用setPixmap进行图片绘制
 QLabel *bgPix = new QLabel(this);
 bgPix->setPixmap(QPixmap(":/timg.jpg"));
 bgPix->adjustSize();
 
 //采用样式表进行绘制
 //bgPix->resize(1440,900);
 //bgPix->setStyleSheet("background-image:url(:/timg.jpg);");

绘制耗时结果:俩种方法对于QLabel耗时都差不多 44-45ms
在这里插入图片描述

4.QWidget(stylesheet)

  //不能是最基础父窗口否则不显示,适合子窗口显示
  QWidget *win = new QWidget(this);
  win->resize(1440,900);
  win->setStyleSheet("border-image:url(:/timg.jpg);");
  win->show();

在这里插入图片描述
绘制耗时结果: 44-45ms

通过4种法比较,windows下绘制一张图片耗时大致基本一致,都在44-47ms之间。而用qpainter耗费时间要略多一ms左右。其他3种方法耗时基本一样。由于数据太接近很难比较出几种方法的耗时优劣。
除此之外,QPushButton也有一个setIcon函数,也可以设置图片进行显示,这个不再演示,也不适合做大图片显示。

三.ARM-Linux下图片显示

以上是window下绘制一张图片耗时结果,接下来我们来研究下ARM平台绘制。arm平台的硬件环境:
CPU:800Mhz 双核,不带opengl硬加速绘制。

绘制方式耗时结果
QPainter280-350ms
QPalette260-270ms
QLabel260-275ms
QWidget265-280ms

ARM平台几种方法的绘制耗时大致排序是:QPainter>QWidget>QLabel>QPalette,
QPalettede的绘制耗时最少。

以上我们主要展示了4种绘制图片的方法,至于耗时不能做绝对的参考,应该结合实际的绘制环境,是否CPU绘制、是否GPU渲染都可能影响绘制过程。

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐