Frage

Ich versuche mit QT und C ++ in einem Bild zu zoomen.

Ich habe Qlabel -Objekte in meinen Klassen geerbt, um Bilder zu zeigen. Und stecken Sie diese Qlabels auch in Mdisara.

Die Zoomfunktion funktioniert gut, aber das QLabel aktualisiert seine Größe nicht sofort. Wenn ich versuche, die Größe des Cursor -Programms zu ändern (mit Cursor), wird es automatisch mit dem Programm mit dem Cursor -Programm und der Größe des Qlabel nach Wunsch umgestaltet.

Wie kann ich die Größen sofort aktualisieren?

Danke für die Hilfe. :)

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

 } 

Das Problem ist gelöst, aber ich denke, ich kann meine eigene Frage nicht beantworten. Wenn ich dem übergeordneten Fensterproblem das gleiche Ereignis hinzufüge, wird das Problem gelöst. Wenn ich das Fenster maximale, hat das innere Objekt auch das Ereignis und stürzt das maximierte Fenster ab.

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

}

War es hilfreich?

Lösung 2

Das Problem ist gelöst, aber ich denke, ich kann meine eigene Frage nicht beantworten. Wenn ich dem übergeordneten Fensterproblem das gleiche Ereignis hinzufüge, wird das Problem gelöst. Wenn ich das Fenster maximale, hat das innere Objekt auch das Ereignis und stürzt das maximierte Fenster ab.

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

Andere Tipps

Du brauchst ein QScrollarea um Ihr Qlabel zu halten. Andernfalls, wenn das Fenster ändert, wird Ihr Qlabel angezeigt nicht Scrollbars haben.

Sehen Sie sich die Beispiele an, um zu sehen, wie Sie einen Image -Betrachter erstellen und wie sie die Größe der Größe haben.

ImageViewer Beispiel

Zoomierbarer Bildbieter

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top