2011-01-17 17 views
0

Ich versuche ein Popup-Menü wie Steuerelement zu erstellen, das benutzerdefinierte Widgets enthält. Ich muss die Maus erfassen, aber ich muss die Kinder im Widget immer noch ihre Maus-Nachrichten bekommen. Es scheint, dass die grabMouse Ereignisse nur an das Widget sendet, das die Maus packte, nicht seine Kinder.Qt popup grabMouse für alle Kinder

Das Popup ist einfach eine Reihe von Schaltflächen (mit einem QGridLayout). Das Steuerelement sollte funktionieren, dass der Benutzer die rechte Maustaste drückt, das Popup erscheint, sie bewegen sich zu einem Objekt und lassen die Maustaste los. Im Idealfall würde es genau wie ein QMenu-Popup funktionieren, aber mit benutzerdefinierten Widgets und einem benutzerdefinierten Layout.

Wie kann ich das erreichen?

Antwort

0

Es scheint, dass die Angabe des Attributs Qt::Popup ausreicht, um das erforderliche grundlegende Verhalten zu erhalten.

Installation eines Ereignisfilters für alle untergeordneten Elemente ist ebenfalls erforderlich. Alle Mausereignisse, Enter/Leave/Hover-Ereignisse müssen erfasst werden. QT hat einen Fehler mit der grabMouse, so dass es nicht funktioniert - der Filter muss verwendet werden, um das erwartete Verhalten zu erhalten.

+0

Dies ist natürlich keine vollständige Antwort, da keine der Standardsteuerelemente, wie AbstractButon, wie vorgesehen funktioniert. Da sie mouseDown nicht gestartet haben, klicken sie nicht auf Schaltflächen. –