显示图像时,在最小化/最大化期间保留纵横比?

时间:2012-06-17 21:24:58

标签: c++ qt qpixmap qmainwindow qlabel

我试图用qt creator实现可扩展的图像小部件,它将保留图像的宽高比。我发现的所有示例或帖子都建议扩展QLabel并重新实现resizeEvent。这就是我所做的,它几乎可以工作,但是有一些问题。

  1. 当主窗口首次打开时,图像会略微增大并扩大主窗口的大小(这不是一个大问题)。

  2. 当我最大化窗口时,所有图像都会向上扩展,但是当我取消最大化窗口时,图像无法缩小。

  3. 我尝试更改QLabel子类(称为ClickableImage)的resizeEvents和包含ClickableImage的布局的父窗口小部件。以下是一些相关的代码。

    void ClickableImage::resizeEvent(QResizeEvent *e)
    {
        qDebug() << "Resizing : " << ticker;
        ticker++;
    
        int w = e->size().width();
        int h = e->size().height();
    
        qDebug() << "W : " << w;
        qDebug() << "H : " << h;
    
        image = QPixmap(fname);
        image = image.scaled(w-7, h-7, Qt::KeepAspectRatio);
        setPixmap(image);
    }
    

    另外,我已阅读以下资料,

    Qt: resizing a QLabel, containing a QPixmap, while keeping it's aspect ratio

    http://doc.trolltech.com/4.2/desktop-screenshot.html

    感谢。

1 个答案:

答案 0 :(得分:0)

我应该尝试四件事。如果您放置一个更大的代码示例,我可能会为您尝试,但这是我拥有的:

  1. 您可能需要在调整大小事件结束时调用adjustSize()。您可能不需要update()来电,但您可以尝试将其中的一个放入其中,看看它是否有所作为。

  2. 最小化事件应与hideEvent()相同,因此如果您希望在最小化时更改图像大小,则将一些图像缩放到其中。

    < / LI>
  3. Window and Dialog Widgets上的文档可能对某些大小调整有帮助,但它也可能是在调整小部件时设置窗口小部件内容大小的递归性质的一部分。

  4. 所有这一切的替代方法是让小部件找出适合您的大小。 QLabel可以选择根据允许的大小来扩展其内容,因此如果你创建一个QLabel,设置它的像素图并设置缩放内容属性,那么它将自动对你进行快速缩放。调整。您可能仍需要将其缩小以进行最小化。

  5. 希望有所帮助。如果您还有问题,请告诉我。