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

C++ 显示图像时,是否在最小化/最大化期间保留纵横比?,c++,qt,qpixmap,qmainwindow,qlabel,C++,Qt,Qpixmap,Qmainwindow,Qlabel,我正在尝试用qt-creator实现一个可伸缩的图像小部件,它将保留图像的纵横比。我找到的所有示例或帖子都建议扩展QLabel并重新实现resizeEvent。这就是我所做的,它几乎可以工作,但有几个问题 当主窗口第一次打开时,图像会略微增长并扩展主窗口的大小(这不是一个太大的问题) 当我最大化窗口时,所有图像都会放大,但当我取消最大化窗口时,图像无法缩小 我已尝试更改QLabel子类(称为ClickableImage)和包含ClickableImage布局的父小部件的resizeEvents。

我正在尝试用qt-creator实现一个可伸缩的图像小部件,它将保留图像的纵横比。我找到的所有示例或帖子都建议扩展QLabel并重新实现resizeEvent。这就是我所做的,它几乎可以工作,但有几个问题

  • 当主窗口第一次打开时,图像会略微增长并扩展主窗口的大小(这不是一个太大的问题)

  • 当我最大化窗口时,所有图像都会放大,但当我取消最大化窗口时,图像无法缩小

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

    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);
    }
    
    void ClickableImage::resizeEvent(QResizeEvent*e)
    {
    qDebug()尺寸().高度();
    
    qDebug()我有四件事你应该试试。如果你放一个更大的代码示例,我可能会帮你试试,但下面是我为你准备的:

  • 您可能需要在调整大小事件结束时调用。您可能不需要
    update()
    调用,但您可以尝试在其中添加一个,看看是否会有所不同

  • 最小化事件应该与a相同,因此如果您希望它更改最小化上的图像大小,也可以在其中添加一些图像缩放

  • 上的文档可能有助于调整大小,但它也可能是在小部件调整大小时设置其大小的递归性质的一部分

  • 另一种方法是让小部件为您确定大小。QLabel有一个选项,让它根据允许的大小缩放其内容,因此如果您创建QLabel,设置其pixmap并设置scale contents属性,那么它将在调整大小时自动为您进行快速缩放。您可能需要uld仍然需要将其缩小以实现最小化


  • 希望这能有所帮助。如果您仍然有问题,请告诉我。

    我有四件事您应该尝试。如果您提供更大的代码示例,我可能会为您尝试,但以下是我为您准备的:

  • 您可能需要在调整大小事件结束时调用。您可能不需要
    update()
    调用,但您可以尝试在其中添加一个,看看是否会有所不同

  • 最小化事件应该与a相同,因此如果您希望它更改最小化上的图像大小,也可以在其中添加一些图像缩放

  • 上的文档可能有助于调整大小,但它也可能是在小部件调整大小时设置其大小的递归性质的一部分

  • 另一种方法是让小部件为您确定大小。QLabel有一个选项,让它根据允许的大小缩放其内容,因此如果您创建QLabel,设置其pixmap并设置scale contents属性,那么它将在调整大小时自动为您进行快速缩放。您可能需要uld仍然需要将其缩小以实现最小化


  • 希望这能有所帮助。如果您仍然有问题,请告诉我。

    您的代码中有一个bug,请用一些乘法替换-7。对不起,我不明白,-7是为了将pixmap保持在QLabel的范围内。我应该乘什么?对不起,我误读了您的代码,并认为您是sca,正在使用7你说得对。如果你的代码中有一个bug,请用一些乘法替换-7。对不起,我不明白。-7是为了让pixmap保持在QLabel的范围内。我应该乘什么?我应该感到抱歉,我误读了你的代码,并认为你是sca,使用了7。你完全正确