2012-04-06 4 views
5

Ich möchte ein halbtransparentes Informationsfenster erstellen, das den anderen Aktivitäten des Benutzers nicht im Wege steht. Alle Klicks auf das Fenster sollten nur passieren, als wäre das Fenster nicht vorhanden.QMainWindow, das Klicks ignoriert, übergibt sie an Hintergrundfenster

Wie empfehlen Sie die Implementierung eines solchen Verhaltens? Gibt es einen einfachen Weg, oder muss ich einem ungeschickten Workaround folgen? Ich denke daran, das Fenster zu verstecken, den Klick erneut auszuführen und das Fenster wieder sichtbar zu machen. Aber das würde immer noch Drag'n'Drop Gesten vermasseln.

+0

Haben Sie es jemals geschafft, dies zu implementieren? Ich versuche das Gleiche zu implementieren. – Kolyunya

Antwort

6

Werfen Sie einen Blick auf einem ENUM-Wert von Qt::WidgetAttribute: Qt::WA_TransparentForMouseEvents:

Wenn aktiviert, deaktiviert dieses Attribut die Lieferung von Mausereignissen das Widget und seine Kinder. Mausereignisse werden an andere Widgets gesendet, als ob das Widget und seine untergeordneten Elemente nicht in der Widgethierarchie vorhanden wären. Mausklicks und andere Ereignisse "übergeben" durch sie. Dieses Attribut ist standardmäßig deaktiviert.

+0

Wie [diese] (http://i.imgur.com/yGB2Q.png)? Ich könnte mich irren, aber es scheint nicht für Windows zu funktionieren. – Pieter

+0

@Pieter Möchten Sie, dass Ihre Klicks durch Ihr halbtransparentes Informationsfenster zu einem anderen Fenster geleitet werden, das zu derselben oder einer anderen Anwendung gehört? – Bill

+0

@Pieter Wichtig ist hier, dass Ihre Klicks auf das semitransparente Informationsfenster mit dem Attribut Qt :: WA_TransparentForMouseEvents von einem anderen Fenster empfangen werden, wenn und nur wenn dieses Fenster zu derselben Qt-Anwendung gehört. Ich überprüfte die Qt-Quelle und das erwähnte Attribut beeinflusst das Verhalten von 'QWidget * QApplication :: widgetAt (const QPoint & Punkt) [statisch]', das intern verwendet wird, um zu entscheiden, welches Fenster der Anwendung das Mausereignis erhält. – Bill

0

Ich habe ein wenig mehr Forschung in "Maus Event Transparenz" (wusste nicht die genaue Terminologie) und ich fand this.

Ich glaube nicht, dass es eine allgemeine und einfache Annäherung an Ihr Problem gibt. Sie werden wahrscheinlich in die native API eindringen müssen. Sobald Ereignisse eine Anwendung erreichen, werden sie nicht an andere Anwendungen weitergeleitet.

Was denkst du? Bin ich dazu verdammt, mit den nativen APIs jedes Betriebssystems zu arbeiten?

Verwandte Themen