установить EventFilter на QWidget (qt4.4.3 / kde4) - PullRequest
5 голосов
/ 20 декабря 2008

У меня есть окно K *, а внутри него виджет, который нуждается в фильтрации событий.

Например я не хочу возможности щелкнуть по нему ...

Как я могу это сделать?

Должен ли я использовать фильтры событий? В таком случае, как лучше?


но моя проблема в том, что я не могу создать подкласс своего виджета, потому что это TerminalInterface-> widget (), а не объект, как другие: \

Ответы [ 3 ]

2 голосов
/ 20 декабря 2008

Помимо подхода кувалды setEnabled в первом ответе, есть два других подхода, один из которых заключается в использовании фильтров событий.

Другой - создать подкласс виджета, а затем переопределить, скажем, события мыши *. Просто оставьте их пустыми, чтобы предотвратить взаимодействие с мышью. Итак:

MyWidget: общедоступный QSomeWidget { Q_OBJECT общественности: MyWidget (QWidget * parent);

защищен: void mousePressEvent (QMouseEvent *) {} .. так далее .. };

1 голос
/ 23 декабря 2008

Похоже, eventFilter() это то, что вы хотите.

Вот раздел документации Qt, в котором говорится об этом: Фильтры событий

По сути, вы должны создать класс, который наследует QObject, а затем реализовать виртуальную функцию eventFilter(). Затем вызовите метод installEventFilter () для объекта, который вы хотите фильтровать с фильтром в качестве параметра.

1 голос
/ 20 декабря 2008

QWidget имеет свойство enabled. Просто позвоните widget->setEnabled(false), и это не позволит ему принимать щелчки мыши. Это может также изменить его внешний вид: например, QPushButton будет затенено.

Фильтры событий кажутся излишними для того, что вы хотите.

...