Qt fitInView et redimensionnement

Je suis en train de faire un QGraphicsView avec la même largeur que de hauteur placé au centre de la fenêtre.

J'ai créé un ordinaire QGraphicsView dans Qt Designer et de définir la taille minimale, ajouté quelques calculs que le centre de la QGraphicsView dans le centre de la fenêtre principale et qui a mis la même largeur que de hauteur. Il utilise seulement setGeometry. Que j'ai créé un QGraphicsScene avec un seul très long rectangle. Je veux le graphique de la scène pour s'adapter à vue, donc j'ai utilisé QGraphicsView::fitInView. Tout fonctionne bien, mais le problème cames lors du redimensionnement de la fenêtre.

Quand j'ai augmenter la hauteur et la largeur de la fenêtre tout fonctionne aussi très bien. Le QGraphicsView a une nouvelle position et une nouvelle taille. Quand j'réduire une partie seulement de la taille de la fenêtre tout fonctionne toujours très bien. Mais (enfin) quand je réduire la taille de la fenêtre au minimum tout se casse. Le rectangle à vue a le droit de la largeur (la même que sans redimensionnement, j'ai mesuré avec une règle 🙂 ), mais une nouvelle marge est créé et aussi QGraphicsView n'est pas positionné et dimensionné de droit (si ce n'est pas seulement la marge, mais peut-être aussi le setGeometry n'a aucun effet).

J'ai remarqué que la même chose arrive quand je l'appelle QGraphicsView::fitInView avant d'utiliser setGeometry.

Il commence à faire de moi un fou, s'il vous plaît aider!

Voici un code:

void MainWindow::resizeEvent(QResizeEvent *e)
{
    int h = e->size().height(),
        w = e->size().width(),
        s;

    if(w > h) s = h-120;
    else s = w-120;

    ui->board->setGeometry((w-s)/2,(h-s)/2,s,s);

    int scaleWidth = ui->board->scene()->width(),
        scaleHeight = ui->board->scene()->height();

    ui->board->fitInView(QRectF(0, 0, scaleWidth, scaleHeight), Qt::KeepAspectRatio);

}

Voici des images de ce qui se passe à QGraphicsView, le rectangle est rouge, la vue est bleu:

Qt fitInView et redimensionnement
Qt fitInView et redimensionnement

  • La documentation pour fitInView membres...rect doit être à l'intérieur de la scène rect; sinon, fitInView() ne peut garantir que l'ensemble rect est visible.' Pouvez-vous imprimer les valeurs de largeur & hauteur lors de la sortie désirée ne se produit pas et de les vérifier par rapport à la scène?
  • La largeur et la hauteur sont les mêmes dans les deux cas. Ils sont aussi grand que l'insertion d'un rectangle.
  • "si(w > h) s = h-120; d'autre s = w-120;" Pouvez-vous nous expliquer ce que tu fais ici et pourquoi vous avez une valeur codée en dur de 120? Si elle se rapporte à l'autre code, veuillez inclure dans votre question.
  • Il n'a aucune relation à l'autre code. Il est là à cause de la "marge". Vous pouvez voir cette lacune à gauche ou sur le côté supérieur dans les images. Il n'a pas d'importance.
  • +1: Merci pour les précieux d'observation "quand je l'appelle QGraphicsView::fitInView avant d'utiliser setGeometry"