如何允许(Py)Qt中的均匀高宽比缩放?

问题描述:

如果将QImage包装在QLabel中,当调整窗口大小并保持纵横比(所以图像不会变形)时,可以向上还是向下缩放它?我发现它可以使用setScaledContents()进行缩放,并且可以设置最小和最大尺寸,但图像仍然会失去其方面。如何允许(Py)Qt中的均匀高宽比缩放?

这将是很好,如果这可以解释使用Python(因为我不知道c + +),但我会拿我能得到的。 :-)

在此先感谢!

我把这个显示为C++,这就是我正在查看的文档。它不应该太难转换为python。

您需要创建QLayoutItem的自定义衍生产品,该自定义衍生产品会覆盖bool hasHeightForWidth()int heightForWidth(int width)以某种方式保留宽高比。您可以传递图像并进行查询,也可以直接设置比例。您还需要确保widget()函数返回指向正确标签的指针。

一旦完成,您可以使用与小部件相同的方式将布局项目添加到布局。因此,当您的标签被添加时,将其更改为使用您的自定义布局项目类。

我还没有真正测试过这个,所以这是一个理论上的解决方案。如果需要的话,我不知道有什么方法可以通过设计师来实现这个解决方案。

+0

嗨,谢谢!这看起来可能会起作用,但我想我可能暂时让它滑动。我认为这超出了我的Qt能力范围,我的期限比我更愿意提前。在我接近完成之后,我会试着重新审视这个问题,然后和你一起回去! – jgoney

将图像转换为QPixmap(使用QPixmap.fromImage(img))然后,您可以使用scaledToHeight()

+0

谢谢Aaron!这不是我想要的。在创建时静态缩放图像(QPixmap),但在调整窗口大小时不会缩放。任何其他想法? – jgoney

+0

在这种情况下,请不要缩放,而是将QLabel放入窗口中并在其上调用'setPixmap()'。 Qt会随着标签一起缩放图像,并且*应该*保留该方面。 –

+0

嗨!再次感谢。设置QPixmap没有扩展,但是我可以直接使用Pixmap来设置它,而不是首先设置QImage。 – jgoney