使用 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 中找到完整的示例。
我想使用 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 中找到完整的示例。