QPainter :: drawPixmap()看起来不太好,质量低?

IMA*_*N4K 5 qt qwidget qpixmap qpainter qt5.5

我想画一个内部的图标文件(.png)QWidgetQPainter::drawPixmap() :

QPixmap _source = "/.../.png";
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.drawPixmap(rect(), _source);
Run Code Online (Sandbox Code Playgroud)

但与QLabel(例如)和较小尺寸(在我的情况下为19*19)相比,结果并不完美.

我能做什么?

****编辑****

QLabel 与pixmap @ size 19*19:

在此输入图像描述

我的绘画@ size 19*19通过SmoothPixmapTransform渲染类型:

在此输入图像描述

dte*_*ech 9

您正在设置错误的渲染提示,您需要QPainter::SmoothPixmapTransform顺利调整大小.默认情况下,使用最近邻方法,该方法速度快但质量很低,并且会对结果进行像素化处理.

QPainter::HighQualityAntialiasing 用于绘制线条和填充路径等时,即使用OpenGL后端进行光栅化时,它对绘制光栅图形没有影响.

编辑:似乎只有这么多SmoothPixmapTransform可以做,当最终结果如此微小时,它并不多:

  QPainter p(this);
  QPixmap img("e://img.png");
  p.drawPixmap(QRect(50, 0, 50, 50), img);
  p.setRenderHint(QPainter::SmoothPixmapTransform);
  p.drawPixmap(QRect(0, 0, 50, 50), img);
  img = img.scaled(50, 50, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  p.drawPixmap(100, 0, img);
Run Code Online (Sandbox Code Playgroud)

此代码生成以下结果:

在此输入图像描述

第二个和第三个图像之间几乎没有任何区别,手动将源图像缩放到所需的尺寸并绘制它会产生最佳结果.这当然是不对的,预计SmoothTransformation会产生相同的结果,但由于某种原因,它的缩放程度不如scale()方法QPixmap.