QT: mouseMoveEvent wird zu häufig ausgegeben?



  • Hi,

    mouseMoveEvent scheint verrückt zu sein. Ich habe es für ein QLabel überschrieben. Wenn ich während gedrückter Maustaste das Label verlasse, wird das Event dennoch noch ausgelöst. Ist das ein Bug oder in irgendeiner Weise beabsichtigt?



  • Mhh ich würde nicht auf einen Bug tippen. Hab das auch mal gemacht. Ich denke mal, dass liegt daran, dass du ja die Taste gedrückt hälst und damit iwie noch im Fokus vom Label bist. Theoretisch müsste ja nach verlassen des Rechtecks des Labels kein Event mehr vom Label kommen. Aber da du es gedrückt hälst, gehört die Maus ja so wie bei Drag&Drop noch zum Label.
    Pder aber du verstehst die Ausgabe deines Programmes fehl. Vllt. ist es auch der Rest des Fensters, der das MouseMoveEvent sendet. Ich kenne ja deinen Code nicht...



  • event->x() und event->y() werden negativ. Und die negativen Zahlen sind dort, wo ich das Label bereits sicher nach oben/links verlassen habe. Missinterpretation sollte also ausgeschlossen sein, ich habe auch viel ausgeben lassen etc.

    Also vermutlich hast Du recht, das ist so beabsichtigt. Aber ich finde es ziemlich nervig, weil ich zum Zeichnen auf der Pixmap des Labels ständig prüfen muss, ob ich noch im Bereich bin. Aber jetzt, wo ich es weiß, ist es okay. 🙂



  • Das ist doch richtig, dass die Werte negativ sind. Wenn du den Rahmen des Labels verlässt, zB na links, müssen die Werte negativ werden, da der Koordinatenursprung in der linken oberen Ecke ist.
    Und zu deinem Zeichnen: In jeder Grafikbibliothek gibt es so einen Zeichenrahmen. Du musst nicht prüfen, ob du noch im Rahmen bist. Du legst einfach eine Maske rum und alles, was außerhalb der Maske gezeichnet würde, wird nicht gezeichnet. Da gibts so einige Mittel. Habe aber leider noch nie damit gearbeitet.



  • Ich weiß, dass der Koordinatenursprung oben links ist. Ich habe das nur erwähnt, um zu zeigen, dass es sich nicht um eine Missinterpretation handelt. 🙂

    Das mit dem Rahmen klingt interessant! Aber eine einfache Abfrage, ob 0 <= x <= width() und 0 <= y <= height() funktioniert ebenfalls. 🙂



  • Jap...bei solchen Kleinigkeiten ist das das Einfachste. Ich glaube diese Maske macht auch nicht groß was anderes...


Log in to reply