Domanda

Sto cercando di ingrandire una foto usando Qt e C ++.

Ho ereditato gli oggetti Qlabel nelle mie classi per mostrare le foto. E metti anche questi Qlabels a Mdiarea.

La funzione zoom funziona bene, tuttavia Qlabel non aggiorna immediatamente le sue dimensioni. Se provo a ridimensionare è il programma manualmente (con il cursore) gestisce automaticamente e ridimensionare il qlabel come desidero.

Come posso aggiornare immediatamente le dimensioni.

Grazie per l'aiuto. :)

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

 } 

Il problema è risolto ma penso di non poter rispondere alla mia domanda. Quando aggiungo lo stesso evento al problema della finestra genitore viene risolto. Ma quando massimizzo la finestra, l'oggetto interno ha anche ricevuto l'evento e si blocca la finestra massimizzata.

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

}

È stato utile?

Soluzione 2

Il problema è risolto ma penso di non poter rispondere alla mia domanda. Quando aggiungo lo stesso evento al problema della finestra genitore viene risolto. Ma quando massimizzo la finestra, l'oggetto interno ha anche ricevuto l'evento e si blocca la finestra massimizzata.

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

Altri suggerimenti

Avete bisogno di un QScrollarea per tenere il tuo qlabel. Altrimenti quando la finestra ridimensiona il tuo qlabel non avere barre di scorrimento.

Guarda gli esempi per vedere come creare un visualizzatore di immagini e come ridimensionare.

Esempio di ImageViewer

Visualizzatore di immagini zoomabili

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top