Seite 1 von 1

Text auf Cursor-Position anzeigen

Verfasst: 21. Dezember 2009 05:25
von raven-worx
Hi,

wie kann ich einen Text oder QLabel auf der derzeitigen Position anzeigen? Also wie einen Tooltip, der ständig auf der Position des Mauszeigers ist.

danke.
mfg

Verfasst: 21. Dezember 2009 06:55
von 24dan
QWidget ohne Rand mit transparentem Hintergrund + einem QLabel
[???]
Dann einen Button bauen oder irgendwas anderes verwenden das auf Mouse Events reagieren kann.
[/???] <- Blödsinn Äh habe nicht richtig gelesen

Eintritt: SelfMadeToolTip an
Austritt: --"-- aus

Problem:
1. keine Ahnung wie man den Rand weg
2. und die Transparents hinbekommt? hier mal nachfragen: http://qtforum.de/forum/viewtopic.php?t=10466

Verfasst: 21. Dezember 2009 07:36
von MiKla
Ich würde mal in den qwt Quellen nach schauen. Da gibt es eine "QwtPlotPicker", die macht glaube ich genau sowas.

Michael

Verfasst: 21. Dezember 2009 13:10
von -=Freaky=-
geht es darum, in deiner anwendung etwas an den mauszeiger zu kleben, oder ausserhalb deiner fenster (sprich auch auf dem desktop oder wenn andere anwendungen den focus haben)?

mfg,
julian

Verfasst: 21. Dezember 2009 17:28
von raven-worx
Hi,

es sollte eine Art Tool-Tip sein. Braucht auch nicht transparent und ohne Rand sein.
Die Event-Methode (dragMoveEvent) hab ich schon, ich weiß nur nicht wie genau man nun den Text auf der Cursor-Position anzeigt.

mfg

Verfasst: 21. Dezember 2009 23:17
von 24dan
ähhh...
habe ich dich falsch verstanden?

Mouse oder Cursor Position holen: int QMouseEvent::globalX () const
oder int cursorPosition () const und als nächstes diese Pos an dein Widget + Qlabel übergeben?

Verfasst: 22. Dezember 2009 05:51
von raven-worx
habe zufällig gerade die QToolTip-Klasse gefunden. Mein Code sieht wie folgt aus. Bei gehaltenem Drag über dem Widget soll ein Tooltip angezeigt werden:
void Namespace::dragMoveEvent ( QDragMoveEvent * event ) {
QToolTip::hideText(); // da bei selben text die position nicht verändert wird
QToolTip::showText( QCursor::pos(),"ToolTip Text", this );
};

void Namespace::dragLeaveEvent( QDragLeaveEvent * event ) {
QToolTip::hideText();
};
Dies liefert allerdings kein befriedigendes Ergebnis, da der ToolTip nicht sehr zuverlässig angezeigt wird, und beim Bewegen der Maus verschwiendet und wiederkommt.
Ich denke das liegt daran, dass dragLeaveEvent auch aufgerufen wird, wenn über Widgets gefahren wird, die innerhalb dieses Widgets dargestellt werden? Wenn ja, was kann ich dagegen tun?

danke.
mfg

Verfasst: 22. Dezember 2009 06:43
von 24dan
hi, noch wach???

also unter LabView hatte ich dafür immer das MouseEintritts Event benutzt das garantiert dir eine längere Anzeige deines QLabel und das darf dann aber erst "aktiv" sein wenn ein DragEvent gesndet wurde.

Wenn ein MouseAustritt woraus auch immer? statt fand einfach sehen ob schon ein DropEvent stattgefunden hat wenn auch das Ja = QLabel aus.

Sorry Qlabel = QtoolTip hideText().

Verfasst: 22. Dezember 2009 15:06
von raven-worx
24dan hat geschrieben:hi, noch wach???
ja. :)
24dan hat geschrieben: also unter LabView hatte ich dafür immer das MouseEintritts Event benutzt das garantiert dir eine längere Anzeige deines QLabel und das darf dann aber erst "aktiv" sein wenn ein DragEvent gesndet wurde.
Konnte keine Methode für MouseEnter finden?
24dan hat geschrieben: Wenn ein MouseAustritt woraus auch immer? statt fand einfach sehen ob schon ein DropEvent stattgefunden hat wenn auch das Ja = QLabel aus.
Das hätte aber auch den Effekt, wenn ich nur kurz mit einem Drag in das Widget fahre und das Widget wieder verlasse, wird mir das Label nicht mehr deaktiviert und bleibt angezeigt, bis zum nächsten Drop-Versuch.
Gibt es keine elegante Lösung, den Drag-n-Drop Bereich auch auf die Kinder zu übertragen, bzw. diese nicht stören zu lassen?

mfg