K* ウィンドウがあり、その中にイベントをフィルター処理する必要があるウィジェットがあります。
たとえば、私はそれをクリックする可能性を望んでいません...
どうやってやるの?
イベントフィルタを使用する必要がありますか? この場合、どうするのが一番良いのでしょうか?
しかし、私の問題は、他のようなオブジェクトではなく、TerminalInterface->widget() であるため、ウィジェットをサブクラス化できないことです:\
K* ウィンドウがあり、その中にイベントをフィルター処理する必要があるウィジェットがあります。
たとえば、私はそれをクリックする可能性を望んでいません...
どうやってやるの?
イベントフィルタを使用する必要がありますか? この場合、どうするのが一番良いのでしょうか?
しかし、私の問題は、他のようなオブジェクトではなく、TerminalInterface->widget() であるため、ウィジェットをサブクラス化できないことです:\
最初の回答のsetEnabledsledgehammerアプローチに加えて、他に2つのアプローチがあり、そのうちの1つはイベントフィルターを使用することです。
もう1つは、ウィジェットをサブクラス化してから、たとえば、mouse*イベントを再実装することです。それらを空のままにしておくだけで、マウスの相互作用を防ぐことができます。それで:
MyWidget:public QSomeWidget {Q_OBJECT public:MyWidget(QWidget * parent);
保護:void mousePressEvent(QMouseEvent *){} .. etc ..};
QWidgetにはenabled
プロパティがあります。呼び出すだけwidget->setEnabled(false)
で、マウスクリックを受け入れることができなくなります。また、外観を変更する場合もあります。たとえば、aQPushButton
はグレー表示されます。
イベントフィルターは、あなたが望むものに対してやり過ぎのように聞こえます。
それはあなたが望むもののように見えeventFilter()
ます。
これについて説明している Qt ドキュメントのセクションは次のとおりです: Event Filters
基本的にはQObject
、仮想関数を継承して実装するクラスを作成する必要がありますeventFilter()
。次に、フィルタをパラメータとして使用してフィルタリングするオブジェクトでinstallEventFilter()メソッドを呼び出します。