Qt5 C ++ QGraphicsView: les images ne correspondent pas au cadre de vue
Je suis en train de travailler sur un programme qui affiche utilisateur une image qui est sélectionnée par lui. Mais il y a un problème parce que je voudrais correspondre à cette image dans QGraphicsView du cadre et de l'image est vraiment plus petit que le cadre de l'.
Donc voici mon code:
image = new QImage(data.absoluteFilePath()); //variable data is defined when calling this method
scn = new QGraphicsScene(this); //object defined in header
ui->graphicsView->setScene(scn);
scn->addPixmap(QPixmap::fromImage(*image));
ui->graphicsView->fitInView(scn->itemsBoundingRect(),Qt::KeepAspectRatio);
J'ai essayé beaucoup de solutions que j'ai trouvé sur le web, mais personne ne m'aide pas. L'image est de taille autour de 40 x 60 px lorsque le cadre est de 200 x 400 px. Quel peut être le problème?
Voici quelques exemple de ce qui est produit avec le code ci-dessus et ce que je veux obtenir:
source d'informationauteur user1257255
Vous devez vous connecter pour publier un commentaire.
Solution pour ma question est showEvent() pour boîte de Dialogue. Cela signifie que vous ne pouvez pas appeler fitInView() avant que le formulaire est affiché, vous devez créer showEvent() pour le dialogue et l'image sera intégrée dans QGraphics Vue de l'image.
Et un exemple de code qui vous avez à ajouter dans la boîte de dialogue code:
La raison pour laquelle vous ne voyez pas vos images comme vous le voulez, c'est parce que le QGraphicsView fonction fitInView ne fait pas ce que vous pensez que cela fonctionne.
Il garantit que l'objet s'adapte à l'intérieur de la fenêtre d'affichage, sans aucun chevauchement des frontières de la vue, de sorte que si votre objet n'était pas dans la vue, à l'appel de fitInView sera la cause de la vue à déplacer /mise à l'échelle, etc pour s'assurer que l'objet est complètement visible. Aussi, si la fenêtre est trop petite pour la zone prévue à fitInView, rien ne se passera.
Donc, pour obtenir ce que vous voulez, carte les extensions de l'GraphicsView coordonnées de la GraphicsScene et puis définissez l'image de la scène de coordonnées de ceux-ci. @VBB dit, si vous étirer l'image, il peut changer l'aspect raio, de sorte que vous pouvez utiliser scaledToWidth sur le QPixmap.
Quelque chose comme ceci: -
Vous pouvez constater que vous n'avez pas besoin de l'appel à fitInView, si votre fenêtre est dans le bon endroit et si vous n'avez pas envie de regarder pixellisée, utiliser une image avec une haute résolution.
Vous devez gérer redimensionner cas, je suppose que c'est la façon dont il est censé être joué: