Ich habe Projekt die innere Struktur von ELF Binärdateien anzuzeigen. Ich benutze QGraphicsView und QGraphicsScene. So kann ich Blöcke in der Grafikszene anzeigen, aber ich benötige nach dem Mausklick auf Einzelblock den Inhalt dieses Blockes anzeigen. Ich versuche, Funktion zu verwenden:Qt QGraphicView und QGraphicScene Mausposition
void MainWindow::mousePressEvent(QMouseEvent* event)
{
ui->textEdit->append(QString("x = %1, y = %2").arg(event->Pos().x()).arg(event->Pos().y()));
}
Aber Position verfolgt im ganzen Fenster. Das Problem ist, dass Breite und Höhe des Fensters dynamisch sind und die Höhe von QGraphicsScene größer sein kann als die des Fensters. Ich kann also keinen einzelnen Block verfolgen.
Ich versuchte eine Funktion wie: mapFromScene, mapToScene, mapFromGlobal, ... aber ich weiß nicht, wie diese Funktionen funktioniert, aber Position, was ich bekomme, war nicht richtig.
Es kam mir in den Sinn, dass Position durch Scrollbar von QGraphicalView und Größe des Fensters berechnet werden sollte, aber es ist schwer genau zu berechnen und es ist nicht die richtige Lösung.
Eine Vorstellung, erhalten wie wahre Position auf Grafik-Szene? Danke für jede Hilfe.
Es ist nicht ganz klar, was Sie wollen.Alle diese Koordinatensysteme sind relativ zueinander und für jede gegebene Implementierung von mousePressEvent, entweder für Widgets oder für Szenenelemente, arbeiten Sie im Koordinatensystem dieses Objekts. Wenn Sie das Mausereignis in Szenenkoordinaten einfügen möchten, führen Sie QGraphicsScene :: mousePressEvent erneut aus. Wenn Sie sie in Ansichtskoordinaten haben möchten, führen sie QGraphicsView :: mousePressEvent usw. neu aus. Ich würde lesen "wahre Position in der Grafik-Szene" als impliziert, dass QGraphicsScene :: mousePressEvent der richtige Ort ist, aber es ist nicht klar. – goug
danke, ich werde es versuchen. – cherioss
Warum behandeln Ereignisse im obersten Fenster? Der Zweck des Grafikszenen-Systems besteht darin, Elemente bereitzustellen, mit denen Sie interagieren können. Sie können alle Arten von Interaktion mit den Elementen selbst haben - sie wurden entworfen, um das einfach zu machen. –