2017-02-05 12 views
0

私はいくつかのカスタム複合ウィジェットを含むQListWidgetを持っています。これらのウィジェットには、QListWidgetがアクセスできない子ウィジェットが含まれています。しかし、後者のウィジェットの中にはQComboBoxesがあり、リストを巡るのではなくマウスホイールイベントを取得します。子ウィジェットを再帰的に無効にするマウスホイールイベント

私はそのような種類のグラブを無効にする方法を探しています。リストをどこでも変更できるという心配なしにリストのどこからでもスクロールすることができます。私が見つけることができるすべてのソリューションは、子供から(イベントフィルタをインストールするか、サブクラス化するか)、アクセスできません。

親からちょうどそれを行う方法はありますか?

私は子供を探してフィルタをインストールしますが、レイヤの数は不明です。

+1

qApplication :: notify(QObject *、QEvent *)をqAppオブジェクトでオーバーライドすることができます(QApplicationを明らかにサブクラス化する必要があります)。 QObjectはQListWidget内のQComboBoxの1つであることが分かります。 –

+0

うわー、それは少し大きすぎます。しかし、とにかくそれについて知っておくと良いです:) – Olivetree

答えて

1

実際、イベントフィルタは、子孫のQComboBoxオブジェクトのすべてがホイールイベントを無視したがっていると仮定して、適切な方法です。親ウィジェットでQObject :: findChildrenを使うことができます。これは、いくつのレベルが下がっても、再帰的にすべてのQComboBox子孫を与えます。次に、ホイールイベントをブロックし、それらの子にそのイベントフィルタをインストールするシンプルなイベントフィルタを作成します。

コードのようなものになるだろう:あなたは、これは「でき、このように動作し、それらを識別するための任意のメカニズムを持っていないすべての子孫のコンボボックスを望んでいないいくつかの理由がある場合

WheelBlocker *filter = new WheelBlocker(); 
QList <QComboBox *> cblist = parent->findChildren <QComboBox *>(); 

for (int i = 0; i < cblist.count(); i++) 
{ 
    cblist[i]->installEventFilter (filter); 
} 

仕事。そうでなければ、それはうまくいくはずです。それはかなりシンプルです。あなたはまだWheelBlockerクラスを書く必要があります。あるいは、イベントフィルタでどのようなクラスを行ってもかまいません。いずれの方法でも問題ありません。

+0

ええ、これはひどい質問で終わった。しかし、私はfindChildrenが再帰的であったとは思わなかったでしょう。しかしウィジェットが選択したイベントに応答するためには、私が[ここ](https://forum.qt.io/topic/)で見つけた 'cblist [i] - > setFocusPolicy(Qt :: StrongFocus); ' 25072 /マウスホイールイベント - コンボボックス - 非 - フォーカスではない/ 4)。 (それは疑問にもかかわらず、それはちょっと余分な情報です) – Olivetree

+0

それは助けてくれるとうれしいです。 – goug

関連する問題