Comment redimensionner une image à l'échelle dans Qt?

J'ai fait une classe appelée ImageLabel qui s'étend QLabel. Je veux garder le ratio de la taille de l'image qu'il affiche n'importe comment étendu qu'il est. Cela fonctionne bien lorsque vous agrandissez la fenêtre. Le problème vient quand vous essayez de faire de la fenêtre plus petite: il ne marche pas redimensionner la hauteur, elle la laisse tendue. Comment puis-je résoudre ce problème?


int ImageLabel::heightForWidth(int width) const {
    int height = (this->size.height()*width)/this->size.width();
    return height;
}

QSize ImageLabel::sizeHint() const {
    return this->size;
}

QSize ImageLabel::minimumSizeHint() const {
    return QSize(0, 0);
}

void ImageLabel::setSizePolicy(){
    QSizePolicy policy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    policy.setHeightForWidth(true);
    QLabel::setSizePolicy(policy);
    QLabel::setScaledContents(true);
}

void ImageLabel::setPixmap ( const QPixmap &pixmap ){
    this->size = pixmap.size();
    QLabel::setPixmap(pixmap);
}

int main(int argc, char *argv[]){
    QApplication a(argc, argv);

    QFrame *frame = new QFrame;
    QVBoxLayout *layout = new QVBoxLayout;
    frame->setLayout(layout);

    QPixmap map;
    map.load("test.png");
    ImageLabel *label = new ImageLabel;
    label->setSizePolicy();
    label->setPixmap(map);
    layout->addWidget(label);
    frame->show();

    return a.exec();
}

source d'informationauteur chacham15