Pregunta

Estoy tratando de acercar una imagen usando QT y C ++.

Heredé objetos Qlabel en mis clases para mostrar imágenes. Y también ponga estas Qlabels en Mdiarea.

La función de zoom funciona bien, sin embargo, el QLabel no actualiza su tamaño de inmediato. Si intento cambiar el tamaño, el programa es manualmente (con cursor) automáticamente lo maneja y cambia el tamaño de Qlabel como desee.

¿Cómo puedo actualizar los tamaños de inmediato?

Gracias por la ayuda. :)

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);

 } 

El problema se resuelve, pero creo que no puedo responder a mi propia pregunta. Cuando agrego el mismo evento al problema de la ventana principal. Pero cuando maximizo la ventana, el objeto interno también obtuvo el evento y bloquea la ventana maximizada.

 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);

}

¿Fue útil?

Solución 2

El problema se resuelve, pero creo que no puedo responder a mi propia pregunta. Cuando agrego el mismo evento al problema de la ventana principal. Pero cuando maximizo la ventana, el objeto interno también obtuvo el evento y bloquea la ventana maximizada.

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);
}

Otros consejos

Tu necesitas un Qscrollarea para sostener su qlabel. De lo contrario, cuando la ventana cambia de tamaño, su qlabel no tener barras de desplazamiento.

Mire los ejemplos para ver cómo crear un visor de imágenes y cómo cambiar el tamaño.

Ejemplo de ImageViewer

Visor de imágenes con zoomable

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top