我有一个 K* 窗口,其中有一个需要过滤事件的小部件。
例如,我不希望点击它的可能性......
我怎样才能做到这一点?
我必须使用事件过滤器吗?在这种情况下,最好的方法是什么?
但我的问题是我不能子类化我的小部件,因为它是 TerminalInterface->widget(),而不是像其他对象:\
我有一个 K* 窗口,其中有一个需要过滤事件的小部件。
例如,我不希望点击它的可能性......
我怎样才能做到这一点?
我必须使用事件过滤器吗?在这种情况下,最好的方法是什么?
但我的问题是我不能子类化我的小部件,因为它是 TerminalInterface->widget(),而不是像其他对象:\
除了第一个答案中的 setEnabled sledgehammer 方法外,还有其他两种方法,其中一种是使用事件过滤器。
另一种是子类化小部件,然后重新实现,比如说,鼠标*事件。只需将它们留空即可防止任何鼠标交互。所以:
MyWidget : public QSomeWidget { Q_OBJECT public: MyWidget(QWidget *parent);
protected: void mousePressEvent(QMouseEvent *) {} .. etc .. };
QWidget 有一个enabled
属性。只需调用widget->setEnabled(false)
,这将阻止它接受鼠标点击。它还可以修改其外观:例如 aQPushButton
将变灰。
事件过滤器听起来像你想要的过度杀伤力。
看起来eventFilter()
就是你想要的。
这是讨论它的 Qt 文档部分: 事件过滤器
基本上你必须创建一个继承QObject
然后实现虚函数的类eventFilter()
。然后在要过滤的对象上调用installEventFilter()方法,并将过滤器作为参数。