2008-12-20 9 views
5

Ich habe ein K * -Fenster und darin ein Widget, das die gefilterten Ereignisse benötigt.installiere EventFilter auf QWidget (qt4.4.3/kde4)

Zum Beispiel habe ich es zu klicken, nicht die Möglichkeit ausschließen wollen ...

Wie kann ich das tun?

Muss ich eventfilters verwenden? In diesem Fall, was ist der beste Weg?


aber mein Problem ist, dass ich nicht meine Widget Unterklasse kann, weil es ein TerminalInterface- ist> Widget(), nicht ein Objekt wie andere: \

Antwort

2

Neben dem Vorschlaghammer-Vorschlaghammer in der ersten Antwort gibt es zwei weitere Ansätze, von denen einer die Verwendung von Ereignisfiltern ist.

Die andere ist die Unterklasse des Widgets, und dann, sagen wir, die Maus * -Ereignisse neu zu implementieren. Wenn Sie sie einfach leer lassen, wird eine Mausinteraktion verhindert. Also:

mywidget: public QSomeWidget { Q_OBJECT public: mywidget (QWidget * parent);

geschützt: Leere mouse (QMouseEvent *) {} .. etc .. };

+0

aber mein Problem ist, dass ich mein Widget nicht unterklassifizieren kann, weil es ein TerminalInterface-> Widget() ist – Giancarlo

1

QWidget hat eine enabled Eigenschaft. Rufen Sie einfach widget->setEnabled(false) an und dies verhindert, dass Mausklicks akzeptiert werden. Es kann auch sein Aussehen ändern: zum Beispiel wird eine QPushButton ausgegraut.

Ereignisfilter klingen wie Overkill für das, was Sie wollen.

+0

Es ist nicht das, was ich will. Ich muss * die Ereignisse * filtern *, um sie nicht zu deaktivieren ... – Giancarlo

1

Es sieht wie eventFilter() ist, was Sie wollen.

Hier ist der Abschnitt von Qt-Dokumentation, die darüber reden: Event Filters

Grundsätzlich müssen Sie eine Klasse erstellen, die QObject erbt und implementieren dann die virtuelle Funktion eventFilter(). Rufen Sie dann die Methode installEventFilter() für das Objekt auf, das Sie mit dem Filter als Parameter filtern möchten.