2017-10-06 1 views
0

Ich möchte eine 2D-QT-Anwendung schreiben. Das Ziel ist es, Rechtecke zeichnen und ihre Größe ändern und ziehen Sie sie mit der Maus herum. QT bietet dazu Funktionen an. Die QGraphicsXxx-Klassen arbeiten nativ mit Pixeln, aber ich möchte in der Lage sein, die Abmessungen und Positionen der Elemente in Längenmaßen wie Metern anzugeben.QT-Koordinatentransformationsstrategie

Ich bin auf der Suche nach einer guten Strategie für die Konstruktion einer Abstraktionsschicht, die die Darstellung der Objektdimension in Metern unabhängig von Pixeln ermöglicht. Ich habe darüber nachgedacht, QRectangle beispielsweise mit Zoominformationen und Methoden zur Konvertierung zwischen realer und Bildschirmdarstellung, d. H. Pixel, zu erweitern.

Das sollte sicherlich möglich sein, aber auch riecht wie eine Straße, um die Hölle zu koordinieren. Und wie eine Menge Arbeit für ein Problem, dass ich nicht überrascht wäre, wenn es schon globaler/eleganter gelöst wäre und ich die QT-Dokumentation einfach nicht finde oder verstehe.

+0

es funktionierte für Sie die GraphicsView Framework? – Mailerdaimon

Antwort

2

Verwenden Sie ein QGraphicsScene zum Layout Ihrer Objekte, alle Größen und Positionen sind float- und einheitsunabhängig. Pixel kommen zum Einsatz, wenn Sie Ihre Szene mit einer QGraphicsView anzeigen. Das Zoomen sollte von der Ansicht übernommen werden, sodass in Ihrer Szene keine Koordinatenumwandlung erforderlich ist. Sie ändern nur die Transformation Ihrer Ansicht, um zu zeigen, was Sie wollen.

Sie können weitere Informationen in der Dokumentation GraphicsView Rahmen lesen: http://doc.qt.io/qt-4.8/graphicsview.html