2008-12-20 13 views
5

Tengo una ventana K *, y dentro de ella, un widget que necesita filtrar los eventos.instalar EventFilter en QWidget (qt4.4.3/kde4)

Por ejemplo, yo no quiero que la posibilidad de hacer clic en él ...

¿Cómo puedo hacer eso?

¿Tengo que utilizar eventfilters? En este caso, ¿cuál es la mejor manera?


pero mi problema es que no puedo subclase mi aparato, porque es un TerminalInterface-> Widget(), no un objeto al igual que otros: \

Respuesta

2

Además del método de mazo setEnabled en la primera respuesta, hay otros dos enfoques, uno de los cuales es utilizar eventfilters.

La otra es subclase del widget, y luego volver a implementar, por ejemplo, el mouse * events. Simplemente dejándolos vacíos evitará cualquier interacción del mouse. Por lo tanto:

MyWidget: QSomeWidget pública { Q_OBJECT pública: MyWidget (* QWidget padre);

protegida: vacío mousePressEvent (QMouseEvent *) {} .. etc .. };

+0

pero mi problema es que no puedo subclasificar mi widget, porque es TerminalInterface-> widget() – Giancarlo

1

QWidget tiene una propiedad enabled. Simplemente llame al widget->setEnabled(false) y esto evitará que acepte clics del mouse. También puede modificar su apariencia: por ejemplo, un QPushButton aparecerá atenuado.

Los filtros de eventos parecen excesivos para lo que quieres.

+0

No es lo que quiero. Necesito * filtrar * los eventos, no deshabilitarlos ... – Giancarlo

1

Parece que eventFilter() es lo que quiere.

Aquí está la sección de documentación de Qt que hablar de ello: Event Filters

Básicamente, usted tiene que crear una clase que hereda QObject y luego implementar la función virtual eventFilter(). A continuación, llame al método installEventFilter() en el objeto que desea filtrar con el filtro como parámetro.

Cuestiones relacionadas