Hallo,
ich habe ein Programm, welches mit QPainter in ein QWidget zeichnet (Beispielsweise ein Kreis).
Gibt es eine Möglichkeit den Inhalt des QWidget-Fensters zu zoomen um Details sichtbar zu machen?
Vielen Dank.
Zoom-Funktion in QWidget
Wenn du mit QGraphicsView arbeitest, dann kannst du sehr einfach eine affine Transformation deiner Inhalte machen, die zB alles was danach kommt zoomt/rotiert/skaliert.
Das ist alles in der Dokumentation zu QGraphicsView beschrieben.
Das ist alles in der Dokumentation zu QGraphicsView beschrieben.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Habe ich gerade auch gelesen, jedoch scheint es nicht so einfach zu sein Linien nach Punkten zu Zeichnen oder? Beispielsweise Kreissegmente usw.
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Danke, habe heute ein paar Versuche angestellt.
Ein Problem habe ich.
Ich habe ein Fenster QGraphicsView und darin ein QGraphicsScene, in dem eine Linie gezeichnet wird.
Nun will ich das so skalieren, dass die Linie immer auf das Fenster des QGraphicsView angepasst wird.
Durch scale klappt das zu Beginn ganz gut, jedoch bei Änderung der Fenstergröße und dem resize Event nicht mehr.
Gibt es evtl. eine einfache Lösung um die Scene immer auf das Fenster zu skalieren?
Ein Problem habe ich.
Ich habe ein Fenster QGraphicsView und darin ein QGraphicsScene, in dem eine Linie gezeichnet wird.
Nun will ich das so skalieren, dass die Linie immer auf das Fenster des QGraphicsView angepasst wird.
Durch scale klappt das zu Beginn ganz gut, jedoch bei Änderung der Fenstergröße und dem resize Event nicht mehr.
Gibt es evtl. eine einfache Lösung um die Scene immer auf das Fenster zu skalieren?
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Ok, auch dieses Problem ist soweit gelöst.
Eine Sache ist jedoch offen:
Ich möchte mit Hilfe des wheel-Events zoomen.
Das funktioniert soweit recht gut, beim Herauszoomen jedoch wird zuerst immer an den unteren Rand meine Grafik gescrollt, bevor herausgezoomt wird.
Scheinbar ist das schon einigen aufgefallen, aber eine Lösung konnte ich nicht finden.
Der Befehl blendet hier scheinbar nur die ScrollBar aus, deaktiviert diese jedoch nicht, sodass erst nach unten gescrollt wird, bevor meine Funktion zu herauszoomen aktiv wird.
Eine Sache ist jedoch offen:
Ich möchte mit Hilfe des wheel-Events zoomen.
Das funktioniert soweit recht gut, beim Herauszoomen jedoch wird zuerst immer an den unteren Rand meine Grafik gescrollt, bevor herausgezoomt wird.
Scheinbar ist das schon einigen aufgefallen, aber eine Lösung konnte ich nicht finden.
Der Befehl
Code: Alles auswählen
ScrollBarAlwaysOff
Code: Alles auswählen
def wheelEvent(self, event):
if event.angleDelta().y() > 0:
factor = 1.1
self.zoom += 1
else:
factor = 0.9
self.zoom -= 1
if self.zoom > 0:
self.graphicsView.scale(factor, factor)
elif self.zoom == 0:
self.graphicsView.fitInView(self.scene.sceneRect())
else:
self.zoom = 0
-
- User
- Beiträge: 116
- Registriert: Freitag 3. Juni 2016, 05:45
Habe das Problem noch immer nicht lösen können.
Bin im Internet auf folgendes gestoßen:
Dieser Code, übersetzt in Python, deaktiviert die Scrollbar-Funktion.
Leider ist es dabei so, dass folgendes keine Wirkung mehr besitzt:
Habt ihr noch eine andere Idee?
Hier der Link zum Code:
https://stackoverflow.com/questions/468 ... ng/4689738
Wenn gewünscht, kann ich einmal Beispielcode hochladen.
Bin im Internet auf folgendes gestoßen:
Code: Alles auswählen
void FooBar::resizeEvent(QResizeEvent *) {
fitView();
}
void FooBar::showEvent(QShowEvent *) {
fitView();
}
void FooBar::fitView() {
const QRectF rect = QRectF(-0.5,-0.5, 1, 1);
ui->graphicsView->fitInView(rect,
Qt::KeepAspectRatio);
ui->graphicsView->setSceneRect(rect);
}
Leider ist es dabei so, dass folgendes keine Wirkung mehr besitzt:
Code: Alles auswählen
QGraphicsView.setDragMode(QGraphicsView.ScrollHandDrag)
QGraphicsView.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
QGraphicsView.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
Habt ihr noch eine andere Idee?
Hier der Link zum Code:
https://stackoverflow.com/questions/468 ... ng/4689738
Wenn gewünscht, kann ich einmal Beispielcode hochladen.