Изменение размера изображения Qlabel при изменении размера окна с помощью resizeEvent
Qt/ C++: я хочу использовать ResizeEvent, чтобы получить размер окна и установить для него размер QLabel, чтобы растянуть изображение и адаптировать его к размерам окна. Левым щелчком мыши я могу изменить размер мое окно и изображение принимает новый размер.
1 ответ
Вы должны иметь следующие соображения:
Нет необходимости хранить QPixmap с помощью указателя, поскольку при передаче его в QLabel он копируется по значению.
Поэтому, если вы измените размер QPixmap, p не будет отражен в QLabel, поскольку QPixmap, в котором есть QLabel, является копией той, которую вы установили в начале.
Нет необходимости использовать макет для этой задачи, так как он создаст бесконечный цикл, так как он также вмешивается в resizeEvent виджета, в котором он был установлен, поэтому, если вы измените размер QLabel, он изменит размер QWidget, и это снова я попытаюсь изменить QLabel, и так далее.
Не рекомендуется изменять исходную карту QPixmap, так как изменение ее размера приводит к изменению пикселей, и вы получите неожиданный эффект.
Используя вышеизложенное, мы получаем следующий код:
*.час
#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);
}
Вы можете найти полный пример по следующей ссылке.