Obtenez visible rectangle de QGraphicsView?
J'ai été en tirant mes cheveux avec celui-ci pendant des heures. Il y a un thread ici à ce sujet, mais rien ne semble fonctionner. QGraphicsView::rect() retourne la largeur et la hauteur, mais la left
et top
les valeurs ne sont pas correctement réglé (toujours 0 -- ignorant le défilé en montant). Je veux en scène coordonnées, mais il devrait être assez facile à traduire à partir de n'importe quel système. Je n'ai aucune idée de ce que horizontalScrollBar()->value()
et vert sont de retour...semble être dénué de sens jibberish.
//created here
void EditorWindow::createScene() {
m_scene = new EditorScene(this);
m_view = new EditorView(m_scene);
setCentralWidget(m_view);
connect(m_scene, SIGNAL(mousePosChanged(QPointF)), this, SLOT(mousePosChanged(QPointF)));
}
///with this constructor
EditorView::EditorView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent) {
setRenderHint(QPainter::Antialiasing);
setCacheMode(QGraphicsView::CacheBackground);
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
setDragMode(QGraphicsView::NoDrag);
scale(1.0, -1.0); //flip coordinate system so that y increases upwards
fitInView(-5, -5, 10, 10, Qt::KeepAspectRatio);
setInteractive(true);
setBackgroundBrush(QBrush(QColor(232,232,232), Qt::DiagCrossPattern));
}
Scratch...la barre de défilement valeurs sont relatives à... eh bien, il ne peut pas être la sceneRect() parce que ce sont des chars... mais quelque chose de similaire.
Peut-être est la façon dont on construit le QGraphicsView, toute source de l'extrait de code ?
Je ne suis pas sûr de ce que le code que vous voulez exactement. Il n'importe pas vraiment comment je le construire... le visible rect doit être exactement le même.
Peut-être est la façon dont on construit le QGraphicsView, toute source de l'extrait de code ?
Je ne suis pas sûr de ce que le code que vous voulez exactement. Il n'importe pas vraiment comment je le construire... le visible rect doit être exactement le même.
OriginalL'auteur mpen | 2009-08-31
Vous devez vous connecter pour publier un commentaire.
Juste la carte les pixels en fonction de fenêtre d'affichage rectangle de la scène à l'aide de la vue:
Bye,
Marcel
graphicsView->rect()
au lieu degraphicsView->viewport()->geometry()
.La fenêtre d'affichage() est pertinente si il y a des frontières autour d'elle (ou visible barres de défilement).
OriginalL'auteur Marcel Taeumel
Nevermind. Venu avec ce qui semble fonctionner.
OriginalL'auteur mpen
voici une solution possible (aucune idée si c'est le sien)
HTH,
Bernhard
OriginalL'auteur Bernhard
La suite de la mise en œuvre retourné les meilleurs résultats pour moi:
Cela fonctionne toujours très bien lorsque les barres de défilement apparaissent. Cela ne fonctionne correctement que si la vue n'affiche pas la scène de rotation ou cisaillés. Si l'affichage est mis en rotation ou cisaillés, puis le rectangle invisible n'est pas de l'axe parallèle à la scène de système de coordonnées. Dans ce cas
renvoie une
QPolygonF
(PAS unQRectF
) qui est la partie visible rectangle en scène coordonnées. Par la voie,QPolygonF
a une fonction membreboundingRect()
qui ne renvoie pas correctement visible rectangle de la vue, mais peut être utile de toute façon.OriginalL'auteur Ralph Tandetzky
Vous pouvez faire ce que vous avez fait, ou utiliser le mapToScene (). Vous ne pouvez pas compter sur la scène de "rectangle" étant un rectangle, cependant, parce que la scène peut être tourné ou cisaillés dans la vue, ce qui entraîne en général polygone lorsque mappé à la scène.
Si votre application ne fait jamais de telles choses, bien sûr, vous êtes libre de supposer qu'un rectangle est toujours approprié.
OriginalL'auteur
Cela ressemble à ce que vous voulez, c'est la scène d'un rectangle. Le
::rect()
méthode est héritée deQWidget
. Voir:http://doc.qt.io/qt-5/qgraphicsview.html#sceneRect-prop
Obtenus directement à partir de la documentation"; Cette propriété contient la zone de la scène visualisée par ce point de vue.". C'est ce que vous voulez à droite? Vous pouvez également utiliser l'onglet map to et mapFrom pour convertir entre systèmes de coordonnées.
Les docs ne sont pas clairs. Ce n' "visualisé"? Signifie-t-il de la zone de la scène que vous travaillez avec ou juste ce qui est dessiné dès maintenant? Si vous avez une énorme scène, vous pouvez faire défiler autour de, ce choix de mots est ambigu. J'ai été aussi confus. il ressemble c'est l'ensemble de la scène, et pas seulement la zone, vous pouvez voir dessiné dans la vue de droite maintenant.
L' (actuel) les docs sont claires, si vous lisez ce qui suit: "La scène rectangle définit l'étendue de la scène, et dans la perspective du cas, cela signifie que la zone de la scène que vous pouvez naviguer en utilisant les barres de défilement."
OriginalL'auteur Henrik Hartz