Cursorposition nur in einem Widget anzeigen
Verfasst: 22. Januar 2008 23:22
hallo,
mein Problem:
Ich habe ein MainWindow und darin ein QLabel für die Anzeige von Bildern, das ganz links oben im MainWindow, natürlich unterhalb der Menueleiste, hängt.
Wenn ich die Mouse über das Bild bewege, soll die aktuelle Position in der Statusleiste angezeigt werden. Das funktioniert soweit, aber die Koordinaten stimmen nicht.
Wenn die Mouse ganz links oben im Bild steht, soll (0,0) angezeigt werden. Ich erhalte aber (1, 28 ). Die Position (0,0) liegt oben links im MainWindow, über der Menueleiste. Jetzt könnte ich natürlich einfach von allen Koordinaten (1, 28 ) abziehen, aber das ist sicher nicht die saubere Methode.
Meine konkreten Fragen:
1. Welche Variablen sagen mir, wo das QLabel im MainWindow liegt, damit ich sie subtrahieren kann? - der Designer gibt bei "geometry" an: 0,0, Breite, Höhe
2. Gibt es eine Qt-Funktion, die automatisch die Anzeige auf mein QLabel begrenzt, d.h. außerhalb keine MouseEvents liefert? Oder muss ich das programmieren?
3. Der Konstruktor meines MainWindows enthält "setMouseTracking (true)". Dennoch muss ich eine Mousetaste drücken, damit MouseEvents gesendet werden. Laut Doku sollte dies mit "setMouseTracking (true)" nicht mehr nötig sein. Wie bekomme ich das hin?
4. Eine C++ Frage: derzeit erzeuge ich den String zur Anzeige der Koordinaten etwas umständlich mit
Mein ursprünglicher Versuch mit
klappt nicht. Der Compiler gibt zwar nur eine Warnung "taking address of temporary" aus, aber das Programm stürzt ab, wenn ich die Mouse bewege.
geht auch nicht, weil das Argument ein QString* und nicht ein QString sein muss.
Mit C++ habe ich so meine Probleme, leider immer noch
Gibt es vielleicht dennoch einen Tipp für mich?
mein Problem:
Ich habe ein MainWindow und darin ein QLabel für die Anzeige von Bildern, das ganz links oben im MainWindow, natürlich unterhalb der Menueleiste, hängt.
Wenn ich die Mouse über das Bild bewege, soll die aktuelle Position in der Statusleiste angezeigt werden. Das funktioniert soweit, aber die Koordinaten stimmen nicht.
Wenn die Mouse ganz links oben im Bild steht, soll (0,0) angezeigt werden. Ich erhalte aber (1, 28 ). Die Position (0,0) liegt oben links im MainWindow, über der Menueleiste. Jetzt könnte ich natürlich einfach von allen Koordinaten (1, 28 ) abziehen, aber das ist sicher nicht die saubere Methode.
Meine konkreten Fragen:
1. Welche Variablen sagen mir, wo das QLabel im MainWindow liegt, damit ich sie subtrahieren kann? - der Designer gibt bei "geometry" an: 0,0, Breite, Höhe
2. Gibt es eine Qt-Funktion, die automatisch die Anzeige auf mein QLabel begrenzt, d.h. außerhalb keine MouseEvents liefert? Oder muss ich das programmieren?
3. Der Konstruktor meines MainWindows enthält "setMouseTracking (true)". Dennoch muss ich eine Mousetaste drücken, damit MouseEvents gesendet werden. Laut Doku sollte dies mit "setMouseTracking (true)" nicht mehr nötig sein. Wie bekomme ich das hin?
4. Eine C++ Frage: derzeit erzeuge ich den String zur Anzeige der Koordinaten etwas umständlich mit
Code: Alles auswählen
mouseMoveEvent(QMouseEvent *event) {
char curs[20];
sprintf(curs, "(%d, %d)", event->x(), event->y());
cvar->setText((QString)curs); // cvar ist ein Pointer auf ein QString und wurde im Konstruktor an die Statusleiste übergeben
} Code: Alles auswählen
mouseMoveEvent(QMouseEvent *event) {
QTextStream cursor(&(cvar->text())); // cvar ist ein Pointer auf ein QString und wurde im Konstruktor an die Statusleiste übergeben
cursor << "(" << event->x() << ", " << event->y() << ")";
Code: Alles auswählen
QTextStream cursor(cvar->text()); Mit C++ habe ich so meine Probleme, leider immer noch
Gibt es vielleicht dennoch einen Tipp für mich?