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:
- 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"
Vous devez vous connecter pour publier un commentaire.
J'ai essayé d'utiliser
QGraphicsView::fitInView
avecQt::KeepAspectRatio,
et a été en cours d'exécution dans des problèmes similaires.J'ai trouvé cette réponse utile:
Comment ancrage QGraphicsView à un point sur une scène?
Il semble que la clé est de définir manuellement la scène du rectangle de délimitation. Le code suivant a fonctionné pour moi: