Ridimensionare graphicsview di QGraphicsView



  • chiedo scusa, ui->graphicsView->resize(width,height) funzionerebbe anche se gli passassi delle dimensioni accettabili e se il form, fosse grande abbastanza per contenerle ... :).

    Ciao, ho creato un widget graphicsview nel form con qtcreator, riesco a visualizzare l'immagine al suo interno associando l'immagine alla scena e la scena al graphicsview. Ma quando espando la finestra principale vorrei che il contenitore graphicsview si espandesse proporzionalmente, l'istruzione ui->graphicsView->setGeometry() non varia width e height del contentirore graphicsView ma ingrandisce solo l'immagine come uno zoom senza controllo di cosa vedere dell'immagine, il contenitore dell'immagine (qgraphicsView) resta delle stesse dimensioni.

    @
    void MiaClasse::resizeEvent(QResizeEvent *event)
    {

    if (elenco.size()>0)    {
        qDebug() << event->oldSize() << " vecchia dimensione";
        qDebug() << event->size() << " nuova dimensione";
    
        QSize wh;
        wh.setWidth(event->size().width() - 680);
        wh.setHeight(event->size().height());
    
        if (wh.width() > 610 &&   wh.height() > 722) {
    
            QRect rettangolo = QRect(680,0,wh.width(),wh.height());
            ui->graphicsView->setGeometry(680,0,wh.width(),wh.height());
    
            delete imageObject;
            imageObject = new QImage();
            QDir dir(dirtif);
            QString absolutePath = dir.absoluteFilePath(elenco.at(contatoreImage));
            imageObject->load(absolutePath);
    
            image = QPixmap::fromImage(*imageObject);
            delete scene;
            scene = new QGraphicsScene(this);
            scene->addPixmap(image);
            scene->setSceneRect(image.rect());
            ui->graphicsView->setScene(scene);
            //ui->graphicsView->ensureVisible ( scene->sceneRect()  );
            ui->graphicsView->ensureVisible (rettangolo);
            ui->graphicsView->fitInView(rettangolo, Qt::KeepAspectRatio);
            oldWidget->setFocus();
        }
        oldWidget->setFocus();
    
    }
    

    }
    Ringrazio chiunque voglia rispondere. Ciao!
    @

    Sull' application output vedo la finestra crescere (la finestra main)

    QSize(1300, 780) vecchia dimensione
    QSize(1300, 783) nuova dimensione
    QSize(1300, 783) vecchia dimensione
    QSize(1306, 793) nuova dimensione
    QSize(1306, 793) vecchia dimensione
    QSize(1307, 794) nuova dimensione
    QSize(1307, 794) vecchia dimensione
    QSize(1313, 800) nuova dimensione
    ....................................:::::::...
    QSize(1495, 1025) nuova dimensione
    QSize(1495, 1025) vecchia dimensione
    .........................................................
    QSize(1483, 1021) nuova dimensione
    QSize(1483, 1021) vecchia dimensione
    QSize(1483, 1020) nuova dimensione
    Ma i graphicsView resta sempre grande uguale



  • Anche io avevo questo problema.......
    Non trovando una soluzione ho optato nel rendere la finestra fullscreen.
    Settando le dimensioni con le proporzioni.
    Diciamo che ho risolto in questo modo :-).
    Non so se anche a te conviene fare così.



  • Dato che il widget della foto occupa mezzo schermo, uso
    @ui.->graphicsView->x() - event->size().width()@

    per determinare la larghezza disponibile della finestra per il widget graphicsView

    Mentre per sapere quanto è grande la finestra, uso:

    @
    resizeEvent(QResizeEvent *event)
    {
    event->size().width()
    event->size()->height()
    }
    @

    all'apertura del programma:
    QSize(-1, -1) vecchia dimensione
    QSize(1920, 1080) nuova dimensione
    la prima volta considera la finestra senza dimensione, quindi, esegue sempre la funzione resizeEvent()
    QSize(1920, 1080) vecchia dimensione
    QSize(1920, 1080) nuova dimensione
    dunque credo che da -1-1 si dimensioni alla grandezza specificata nel form generato con qtcreator, e siccome modifica la dimensione, si richiama un'altra volta, con la dimensione vecchia identica alla nuova.

    Poi quando eseguo operazioni manuali viene chiamata di nuovo la funzione ogni volta..

    Devo capire come fare a gestire le dimensioni della finestra quando uso un'altro schermo magari del portatile.
    e devo anche capire perchè va in crash se massimizzo la finestra quando clicco due volte sulla decorazione di windows in alto, invece di massimizzare muore il programma.
    Ma questa è un'altra storia :)
    ciao e grazie!



  • Cmq per gestire le dimensioni anche se cambi schermo devi fare come ti ho detto prima. Ripeto io utilizzo il fullscreen e utilizzando le proporzioni anche se cambio schermo o pc le dimensioni cambiano in base allo schermo.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.