Qt | QPixmap 缩放不正确

Nic*_*son 2 c++ qt resize qpixmap

我有一个 QPixmap,我将其设置为在调整窗口大小时根据比例调整大小。当图像首次加载时,该比例是良好且清晰的,但当我调整图像大小时,它会扭曲所有图像。它设法从这里开始: 调整窗口大小之前的图像 对此: 调整窗口大小之前的图像

相关代码:

void MainWindow::resizeEvent(QResizeEvent *)
{
    QPixmap pix = ui->labelImage->pixmap()->scaled(ui->labelImage->size(),
                                                   Qt::KeepAspectRatio);
    ui->labelImage->setPixmap(pix);
}
Run Code Online (Sandbox Code Playgroud)

G.M*_*.M. 7

您正在从小部件中读取当前的像素图,对其进行缩放,然后将缩放后的像素图写入到小部件中。考虑一下如果小部件变得非常小然后将其大小调整为更大的东西会发生什么 - 由于使用了缩放变换,您将得到很多工件。

我认为更好的方法是将原始全尺寸图像存储在 MainWindow 类的成员中,例如......

QPixmap m_original_pixmap;
Run Code Online (Sandbox Code Playgroud)

然后在您的 resizeEvent 成员中使用该版本的缩放版本...

void MainWindow::resizeEvent(QResizeEvent *)
{
  QPixmap pix = m_original_pixmap.scaled(ui->labelImage->size(), Qt::KeepAspectRatio);
  ui->labelImage->setPixmap(pix);
}
Run Code Online (Sandbox Code Playgroud)

不确定这是否会清除所有内容,但应该以某种方式消除一些工件。

附带说明一下,如果您担心图像质量,您可以考虑在缩放操作中指定 Qt::SmoothTransformation 作为像素图转换模式。