Qt C++中如何调整像素大小并保持像素化?

10

在我的项目中,我有一个QLabel控件,我会频繁更改其图片像素图像,例如:

ui->frameLabel->setPixmap(slot_pic[blockId[currentSlot]][damageId[currentSlot]]);

slot_pic只是一个二维地图。因此,您可以像这样更清楚地查看它:

ui->frameLabel->setPixmap(pixmap);

这个图像的大小是16x16,我的标签是32x32。我已经勾选了scaledContents,所以当pixmap更改时,图像会增加一倍。但是,现在图像变得模糊了。我知道原因,但我想知道是否有一种方法可以使其保持像素化,我只想要一个更大的像素化图像。(如果这能帮助你理解我的意思,该图像来自Minecraft)

感谢您的时间 :)


有一些RenderHints可以在QPainter中设置。在那里,您可以禁用抗锯齿。我不确定如何让QLabel::paintEvent使用此标志。 - Ralph Tandetzky
我从未使用过QPainter,所以我需要去了解一下。Pixmap并没有在我的程序中被创建,只是一个资源PNG文件。我有一张较小的图片,当你点击它时,标签会显示相同的图片但更大。 - mrg95
1个回答

21

不要让QLabel做缩放。相反,使用QPixmap::scaled()自己进行缩放。像这样:

ui->frameLabel->setPixmap(
    pixmap.scaled(32, 32, Qt::IgnoreAspectRatio, Qt::FastTransformation));

重要的参数是最后一个,transformMode,它会告诉我们是否使用双线性过滤。

这个完美地运行了。零错误,而且很简单。谢谢 :) - mrg95
谢谢您的详细答复。我知道这个方法,而且也考虑过使用它,但我想找一个可以在Qt Designer中直接设置样式表(如果可能)的解决方案!有人知道类似的方法吗? - zeFree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接