gpt4 book ai didi

css - 如何在 Qt 样式中平滑缩小背景图像?

转载 作者:技术小花猫 更新时间:2023-10-29 10:58:13 25 4
gpt4 key购买 nike

默认情况下,Qt 使用一种非常简单、快速且丑陋的缩放图像的方式,Qt::FastTransformation ,可能是最近邻插值或非常相似的东西。

处理 QPixmap 时,可以选择视觉上更好的缩放比例,例如,

pixmap = pixmap.scaledToHeight(height, Qt::SmoothTransformation);

但是,如果图像不在 QPixmap 中,我们该怎么办?对象,而只是按钮或其他小部件的背景?

例如,以下是创建自动调整大小、完全自定义按钮的一种非常简单的方法,当与布局和 setStretch() 一起使用时,非常适合与分辨率无关的应用程序。 .

ui->pushButton->setStyleSheet(
"QPushButton { border-image: url(:/img/button.png) 0 0 0 0 stretch stretch; }"
"QPushButton:checked { border-image: url(:/img/button_checked.png) 0 0 0 0 stretch stretch; }"
"QPushButton:pressed { border-image: url(:/img/button_pressed.png) 0 0 0 0 stretch stretch; }"
"QPushButton:checked:pressed { border-image: url(:/img/button_checked_pressed.png) 0 0 0 0 stretch stretch; }"
);

我用了border-image而不是 background-image由于a deficiency在 Qt 样式表中。

如何对样式表中使用的图像进行更平滑的缩放?

用像素图实现同样的事情就没那么优雅了。我必须始终捕捉调整大小事件,重新计算我所有小部件的新大小,并手动重新绘制它们。

编辑:

有趣的是,如果图像正在放大,平滑缩放适用于样式表,但在缩小时则不然。

在下面的例子中,第一行使用了一个32*32的图标,第二行使用了一个大于2000*2000的均匀网格。

example

最佳答案

在内部,Qt 使用QPainter 绘制样式,而QPainter 在绘制缩放像素图时使用双线性插值。当缩减因子足够小时,从质量 Angular 来看,这有一个主要缺点,请参见 this bug report例如。为了获得最佳质量,背景源图像应始终在目标大小的 [0.5, 2.0] 因子范围内。 AFAICT 没有简单的方法可以摆脱这个限制。

关于css - 如何在 Qt 样式中平滑缩小背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41690482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com