使用 resizeEvent 在调整 window 时调整 Qlabel 图像的大小

Resizing Qlabel image upon resizing window using resizeEvent

我想使用 ResizeEvent 接收 window 的大小并将其设置为 QLabel 的大小,以便使图像拉伸并适应 window 的 dimensions.by 单击鼠标左键我可以调整我的大小 window 并且图像采用新的大小。

您必须有以下考虑:

  • 没有必要通过指针存储 QPixmap,因为当将它传递给 QLabel 时,它是按值复制的。

  • 因此,如果你改变QPixmap的大小,p将不会反映在QLabel中,因为有QLabel的QPixmap是你一开始建立的那个的副本。

  • 没有必要为此任务使用布局,因为它会创建一个无限循环,因为这也会干预已建立的小部件的 resizeEvent,因此如果您更改其大小QLabel,它将改变 QWidget 的大小,我将再次尝试改变 QLabel,依此类推。

  • 不建议修改原始QPixmap,因为改变它的大小会修改像素,你会得到意想不到的效果。

利用上面的代码我们得到以下代码:

*.h

#ifndef TESTSIZE_H
#define TESTSIZE_H

#include <QWidget>

class QLabel;

class testsize : public QWidget
{
    Q_OBJECT

public:
    explicit testsize(QWidget *parent = 0);
    ~testsize();

private:
    QLabel *image;
    QPixmap original_px;

protected:
    void resizeEvent(QResizeEvent *event);
};

#endif // TESTSIZE_H

*.cpp

#include "testsize.h"

#include <QLabel>
#include <QResizeEvent>

testsize::testsize(QWidget *parent) :
    QWidget(parent)
{
    image = new QLabel(this);
    original_px = QPixmap(":/wallpaper.jpg");
    image->setPixmap(original_px);
    resize(640, 480);
}

testsize::~testsize()
{
}


void testsize::resizeEvent(QResizeEvent *event)
{
    QPixmap px = original_px.scaled(event->size());
    image->setPixmap(px);
    image->resize(event->size());
    QWidget::resizeEvent(event);
}

您可以在下面的 link 中找到完整的示例。