Qt / c ++:我想使用ResizeEvent来接收窗口的大小并将其设置为QLabel的大小,以便使图像拉伸并适应窗口的尺寸。通过鼠标左键单击我可以调整窗口的大小,图像也会有新的尺寸。
答案 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中找到完整示例。