我有一个带有布局和QLabel的窗口。 QLabel包含图像。图像应填充QLabel的父布局。如果用户决定缩小窗口,图像应缩小,直到达到最小尺寸 - 此时窗口不再可缩放。如果用户决定向上缩放窗口,则图像应该增长。在这两种情况下,都应保留图像的宽高比。
我已经设法使用setScaledContents用图像填充QLabel的父级。但是,最小大小似乎总是图像文件的原始大小,我没有定义 - 当我尝试通过QPixmap.scaled()来定义它时,它使图像极其像素化。虽然我可以缩放图像,但永远不会保留纵横比。
我觉得这应该是相当简单的,但我很失落。救命!
答案 0 :(得分:1)
使用最小setMinimumSize的setSizePolicy和size policy,这样可以阻止标签缩小到您设置的最小尺寸以下。
保持纵横比稍微复杂一些。 Fist将要绘制的图像的像素图保存为QLabel的成员变量。接下来重新实现标签的绘制事件,以便您可以自己进行像素图的缩放。如果在paint事件中调用this-> size(),您将获得要绘制像素图的区域。使用该大小调用pixmap上的scaled和Qt :: KeepAspectRatio,然后在标签上调用setPixmap。最后调用QLabel :: paint_event。