Holen Sie sich sichtbare Rechteck von QGraphicsView?
Ich habe mein Haar ziehen mit dieser für Stunden. Es gibt einen thread hier, aber nichts scheint zu funktionieren. QGraphicsView::rect() liefern die Breite und Höhe, aber das left
und top
Werte sind nicht richtig eingestellt (immer 0 -- ignorieren der gescrollt Menge). Ich will, dass es in Szene-Koordinaten, aber es sollte einfach genug, zu übersetzen, von jedem system. Ich habe keine Ahnung, was horizontalScrollBar()->value()
und vert zurückkehren...bedeutungslos zu sein scheint 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));
}
- Kratzer,...der scrollbar die Werte sind relativ zu... naja, es kann nicht sein das sceneRect (), da diese schwimmt... aber etwas ähnliches.
- Vielleicht ist, wie Sie zu konstruieren, das QGraphicsView, jeder source-code-snippet ?
- Ich bin mir nicht sicher, welchen code Sie genau möchten. Ist es nicht eigentlich egal, wie ich es konstruieren... immer das sichtbare "rect" sollte genau das gleiche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur anzeigen der pixel-basierten viewport-Rechteck, um die Szene mit der Ansicht:
Bye,
Marcel
graphicsView->rect()
stattgraphicsView->viewport()->geometry()
.Nevermind. Kam mit dieser, das scheint zu funktionieren.
hier ist eine mögliche Lösung (keine Ahnung, ob dies beabsichtigt)
HTH,
Bernhard
Die folgende Implementierung zurückgegeben, die besten Ergebnisse für mich:
Diese Werke noch wirklich gut, wenn Bildlaufleisten angezeigt werden. Dieser funktioniert nur richtig, wenn die Ansicht nicht angezeigt wird die Szene gedreht oder geschert. Wenn die Ansicht gedreht oder geschert, dann ist das sichtbare Rechteck ist nicht Achsen-parallele in der Szene-Koordinatensystem. In diesem Fall
gibt eine
QPolygonF
(NICHTQRectF
), die das sichtbare Rechteck in Szene-Koordinaten. ÜbrigensQPolygonF
hat eine member-FunktionboundingRect()
die nicht richtig sichtbar Rechteck in der Ansicht, aber könnte nützlich sein, sowieso.Können Sie tun, was Sie getan haben, oder verwenden Sie die mapToScene () - Funktionen. Sie kann nicht zählen, auf die daraus resultierende Szene "Rechteck" ein Rechteck, jedoch, weil die Szene kann gedreht oder geschert in den Blick, was in einem Allgemeinen polygon, wenn zugeordnet, um die Szene.
Wenn Ihre Anwendung nicht solche Dinge, natürlich, du bist frei, zu vermuten, dass ein Rechteck ist immer angebracht.
Es klingt wie das, was Sie wollen, ist die Szene Rechteck. Die
::rect()
Methode geerbt vonQWidget
. Siehe:http://doc.qt.io/qt-5/qgraphicsview.html#sceneRect-prop