Динамический ресайз QLabel с QPixmap с сохранением аспекта

Есть контейнер QWidget у него заданы минимальные значения. И внутри него лейаут с QLabel. У QLabel также заданы минимальные значения. QLabel задаётся QPixmap. Когда контейнер растягивается мышью, либо наоборот стягивается нужно чтобы QLabel вёл себя также как при scaledContents(true) только чтобы при этом аспект сохранялся. У контейнера переопределён void resizeEvent(QResizeEvent *) override и внутри ресайз ивента выполняется масштабирование картинки label->setPixmap(label->pixmap()->scaled(label->width(), label->height(), Qt::KeepAspectRatio)), но это нормально отрабатывает когда контейнер увеличивается. В обратную сторону, т.е. на уменьшение контейнера это не работает корректно, потому что при увеличении контейнера картинка увеличивается до определенного размера, занимает там все пространство, и контейнер уже обратно не сжимается мышкой если тянуть за края виджета. Можно апскейлить картинку не на всё пространство виджета, а в процентном соотношении, но тогда уменьшение будет не плавным, сначала рамка упрётся в картинку, она отресайзится, затем снова. А хотелось бы чтобы отрисовка шла плавно и динамически, как при scaledContents(true)


Ответы (1 шт):

Автор решения: GrandPa Island
label->setPixmap(label->pixmap()->scaled(label->width()-0.1, label->height()-0.1, Qt::KeepAspectRatio))

В данном случае вы сможете уменьшать окно , но есть нюанс. Это будет происходить почучуть а не до макс минимального размера.

Чтобы это работало динамически использайте void YourWidghet::resizeEvent(QResizeEvent* event) и в нутри него обновляйте размер.

→ Ссылка