Question

Je suis en train de zoomer dans une image à l'aide de l'intervalle QT et C ++.

Je hérité des objets QLabel dans mes classes pour montrer des photos. Et aussi mettre cette QLabels en mdiarea.

fonction de zoom fonctionne bien mais le QLabel ne met pas à jour sa taille immédiatement. Si je tente de redimensionner est le programme manuellement (avec le curseur) gère automatiquement et redimensionne la QLabel que je souhaite.

Comment puis-je mettre à jour immédiatement les tailles.

Merci pour l'aide. :)

bool MdiChild::event ( QEvent * e ){
    //qDebug("asd1");
if(e->type() == QEvent::Wheel){
    int numDegrees = ((QWheelEvent*) e)->delta() / 8;
    double numSteps = (double)numDegrees/150;
    int w = pix->width();
    int h = pix->height();
    ratio += numSteps;
    qDebug("ratio = %f", ratio);
    QPixmap* p = new QPixmap(pix->scaledToHeight ( (int)(h * ratio),Qt::FastTransformation  ));
    setPixmap(*p);
    adjustSize();
    adjustSize();
    update();

}
return QWidget::event(e);

 } 

Le problème est résolu, mais je pense que je ne peux pas répondre à ma propre question. Quand j'ajoute le même événement au problème de la fenêtre parent est résolu. Mais quand j'agrandissez la fenêtre l'objet interne a également obtenu l'événement et se brise la fenêtre maximisée.

 bool ImageProcessor::event ( QEvent * e ){
if(e->type() == QEvent::Wheel){
    QList<QMdiSubWindow *> childList = ui.mdiArea->subWindowList();
    for(int i = 0; i<childList.count(); i++){
        childList[i]->adjustSize();
    }
}
return QWidget::event(e);

}

Était-ce utile?

La solution 2

Le problème est résolu, mais je pense que je ne peux pas répondre à ma propre question. Quand j'ajoute le même événement au problème de la fenêtre parent est résolu. Mais quand j'agrandissez la fenêtre l'objet interne a également obtenu l'événement et se brise la fenêtre maximisée.

bool ImageProcessor::event ( QEvent * e ){
if(e->type() == QEvent::Wheel){
    QList<QMdiSubWindow *> childList = ui.mdiArea->subWindowList();
    for(int i = 0; i<childList.count(); i++){
        childList[i]->adjustSize();
    }
}
return QWidget::event(e);
}

Autres conseils

Vous avez besoin d'un QScrollArea pour tenir votre QLabel. Sinon, lorsque la fenêtre redimensionne QLabel sera pas barres de défilement.

Regardez les exemples pour voir comment créer une visionneuse d'images et comment ils redimensionne.

exemple ImageViewer

zoomables Picture Viewer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top