2017-02-13 12 views
1

なぜ正しく動作しないのかわかりません。ウィンドウが飛び出したときにTextEditフォーカスをtrueに設定したい。 TextEditは、その領域でクリックが行われた後にのみ、キーイベントを受け取ることができます。StackViewの項目内のTextEditでフォーカスを取得できません

main.qml

ApplicationWindow { 
    id:aplWin 
    visible: true 
    minimumWidth: 1280 
    minimumHeight: 1024 

    StackView { 
     id: stackView 
     anchors.fill: parent 
     initialItem: SignInWin {} 
    } 
} 

SignInWin.qml

Page { 
    id: root 
    width: parent.width + 500 
    height: parent.height 

    Rectangle { 
     border.color: "black" 
     y: 200 
     width: 50 
     height: 20 
     z: 1 
     TextEdit { 
      anchors.fill: parent 
      color: "black" 
      focus: true 
     } 
    } 
} 
+0

'Component.onComplete'が実行されたときに' forceActiveFocus() 'を実行してみてください。 – derM

答えて

1

の問題がである:

あなたはあなたの焦点ツリーに複数の層を持っています。各FocusScopeには、1つの子がフォーカスを持つことができます。だから今、あなたが持っている:私のパズル

StackView -> Page -> TextEdit 

何、それはFocusScopePageの行為であるかのようにということですが、そのように記載されていません。 PageStackViewが持っていない限り

このことは、TextEditactiveFocusを持っていません。入力を取り出すにはactiveFocusが必要です。

だから、あなたがフォーカス階層を反復します方法forceActiveFocus()を使用し、各FocusScopeのためにフォーカスを要求するか、階層内の各レイヤーのtruefocus -propertyを設定することができます。

ApplicationWindow { 
    id:aplWin 
    visible: true 
    minimumWidth: 1280 
    minimumHeight: 1024 

    StackView { 
     id: stackView 
     anchors.fill: parent 
     initialItem: SignInWin {} 
     focus: true // <--- HERE! 
    } 
} 

Page { 
    id: root 
    width: parent.width + 500 
    height: parent.height 
    focus: true // <--- AND HERE 

    Rectangle { 
     border.color: "black" 
     y: 200 
     width: 50 
     height: 20 
     z: 1 
     TextEdit { 
      anchors.fill: parent 
      color: "black" 
      focus: true 
     } 
    } 
} 
関連する問題