Problema de cambio de tamaño de QT después de Zoom
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);
}
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.