【问题标题】:Resizing Qlabel image upon resizing window using resizeEvent使用 resizeEvent 调整窗口大小时调整 Qlabel 图像大小
【发布时间】:2018-03-09 15:31:25
【问题描述】:

我想使用 ResizeEvent 接收窗口的大小并将其设置为 QLabel 的大小,以使图像拉伸并适应窗口的尺寸。通过鼠标左键单击我可以调整我的大小窗口,图像采用新尺寸。

【问题讨论】:

标签: c++ qt qlabel


【解决方案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 中找到完整的示例。

【讨论】:

  • 我想在窗口中添加两个图像的真实故事,在这种情况下,我们必须使用布局来设置位置,但正如用户所说,如果我们使用布局,它将创建一个无限循环...???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2017-04-29
  • 2021-10-02
  • 2019-06-17
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多