1

QML イベントを初期イベント ハンドラの途中で別の QML アイテムに渡したい状況があります。例えば

Item {
   id: item1

   Keys.onPressed: {
      // Pre-process...

      passEventToObject(event, item2);

      // Post-process based on results of event passing...
   }
}

TextInput {
   id: item2
   // Expect key press event to be handled by text input
}

達成するために何ができpassEventToObjectますか?

ノート:

  • Keys.onPressed内部を変更するアクセス権がありませんitem2。これは QML 組み込み ( TextInput) です。
  • イベントの受け渡しは、途中で発生する必要がありますitem1.Keys.onPressed
4

3 に答える 3

3

最初のオブジェクト シグナル ハンドラで、他のオブジェクトのシグナルを呼び出すだけです。

Item {
   id: item1
   Keys.onPressed: {
      // Pre-process...
      item2.Keys.pressed(event);
      // Post-process based on results of event passing...
   }
}

Item {
   id: item2
   Keys.onPressed: {
      // Some other stuff happens here
   }
}
于 2014-11-14T10:53:50.127 に答える
1

ここにある「Signal to Signal Connect」セクションが役立つと思います。基本的に、各シグナルにはconnect、シグナルチェーンを作成するために利用できるメソッドがあります。

(あなたの例のように)重要なイベントを進めることに興味がある場合は、代わりに次のforwardToプロパティを検討してください。

このプロパティは、キーの押下、キーの解放、およびインプット メソッドからのキーボード入力を他のアイテムに転送する方法を提供します。これは、ある項目でいくつかのキー (上下矢印キーなど) を処理し、別の項目で他のキー (左右矢印キーなど) を処理する場合に便利です。キーが転送されたアイテムがイベントを受け入れると、リストの後のアイテムには転送されなくなります。

ドキュメントには、素晴らしく簡単な例が記載されています。

于 2014-11-13T17:10:43.483 に答える