c++ - Qt QLabel 使用窗口缩放图像

标签 c++ image qt

我有一个带有布局和 QLabel 的窗口。 QLabel 包含一个图像。图像应填充 QLabel 的父布局。如果用户决定缩小窗口,图像应该缩小直到达到最小尺寸——此时窗口不应再缩放。如果用户决定放大窗口,图像应该变大。在这两种情况下,图像的纵横比都应保持不变。

我已经使用 setScaledContents 设法用图像填充 QLabel 的父级。然而,最小尺寸似乎总是图像文件的原始尺寸,我没有定义 - 当我尝试通过 QPixmap.scaled() 定义它时,它使图像极度像素化。虽然我可以放大图像,但纵横比永远不会保留。

我觉得这应该是相当简单的,但我很迷茫。帮助!

最佳答案

使用setMinimumSizesetSizePolicysize policy最小值,这应该阻止标签缩小到您设置的最小尺寸以下。

保持纵横比稍微复杂一些。首先将要绘制的图像的像素图保存为 QLabel 的成员变量。接下来重新实现标签的绘制事件,以便您可以自己缩放像素图。如果你在 paint 事件中调用 this->size() ,你将得到要绘制像素图的区域。调用scaled在具有该大小和 Qt::KeepAspectRatio 的像素图上,然后在标签上设置像素图。最后调用 QLabel::paint_event。

关于c++ - Qt QLabel 使用窗口缩放图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40139306/

相关文章:

c++ - 找到最大可能三角弦的总和

c++ - 如何在跳过已经添加的数字的同时在数组中添加数字?

c# - 从 URL 获取图像

qt - 如何从另一个类访问小部件

c++ - 嵌套通用容器迭代 C++

python - 使用 matplotlib 绘制图像颜色直方图

sql - Delphi加载图像保存为sql数据库中的blob

c++ - Qt 在 Windows 中部署应用程序需要的 dll

qt - 生成的 moc 名称不正确

c++ - 如何控制QSplashscreen的定位?