I am trying to display an image using QGraphicsView keeping the same ratio when the window is resized.
i.e. without stretching the image.
Unfortunately I am not succeeding.
I tried searching online a I tried several solutions but none worked.
So I created this mini example so that once solved it will remain a trace of a working solution.
I am using QT 6.6
Any help is welcome!

#include <cstdio>
#include <cstdlib>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QGraphicsScene>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QBoxLayout>
#include <QtGui/QWheelEvent>
class viewport_t : public QGraphicsView {
public:
QTransform matrixWorld;
QGraphicsScene * scene;
QImage image;
QWidget * windows;
viewport_t(QWidget * arg) : QGraphicsView(arg) {
windows = arg;
image.load("/Users/thewoz/Desktop/Lena.png");
myScene = new QGraphicsScene(arg);
setScene(myScene);
}
void paintEvent(QPaintEvent * event){
QPainter myPainter(viewport());
myPainter.setWorldTransform(matrixWorld);
QRectF target(0, 0, viewport()->width(), viewport()->height());
QRectF source(0, 0, image.width(), image.height());
myPainter.drawImage(target, image, source);
fitInView(myScene->sceneRect(), Qt::KeepAspectRatio);
QGraphicsView::paintEvent(event);
}
void resizeEvent(QResizeEvent * event) {
myScene->setSceneRect(0, 0, event->size().width(), event->size().height());
return QGraphicsView::resizeEvent(event);
}
};
class window_t : public QWidget {
public:
QBoxLayout * myGlobalLayout;
viewport_t * myView;
window_t() {
resize(400, 300);
myGlobalLayout = new QBoxLayout(QBoxLayout::TopToBottom);
myGlobalLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
setLayout(myGlobalLayout);
myView = new viewport_t(this);
myGlobalLayout->addWidget(myView, Qt::AlignCenter);
show();
}
};
int main( int argc, char** argv ) {
QApplication app(argc, argv);
window_t window;
return app.exec();
}