使用resizeEvent调整窗口大小时调整Qlabel图像的大小

时间:2018-03-09 15:31:25

标签: c++ qt qt4 qt5.4 qt5.6

Qt / c ++:我想使用ResizeEvent来接收窗口的大小并将其设置为QLabel的大小,以便使图像拉伸并适应窗口的尺寸。通过鼠标左键单击我可以调整窗口的大小,图像也会有新的尺寸。

1 个答案:

答案 0 :(得分:1)

您必须考虑以下因素:

  • 没有必要通过指针存储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中找到完整示例。