2017-02-13 2 views
1

Ich verstehe nicht, warum es nicht ordnungsgemäß funktioniert. Ich möchte TextEdit Fokus auf True setzen, wenn das Fenster herausspringt. TextEdit kann Schlüsselereignisse nur empfangen, nachdem ein Klick auf seinen Bereich ausgeführt wurde.Kann Fokus in TextEdit innerhalb eines StackView-Elements nicht abrufen

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

Versuchen Sie 'forceActiveFocus()' wenn 'Component.onComplete' – derM

Antwort

1

Die Probleme sind solche, mit denen

Sie haben mehrere Schichten in Ihren Fokus Baum. Jeder FocusScope kann ein Kind haben, das Fokus hat. So, jetzt haben Sie:

StackView -> Page -> TextEdit 

Was mir ein Rätsel ist, dass Page wirkt, als wäre es eine FocusScope waren, ist aber nicht auf diese Weise dokumentiert.

Dies bedeutet, wird diese TextEdit nicht activeFocus haben, es sei denn die PageUND die StackView haben. Zum Abrufen der Eingabe wird jedoch activeFocus benötigt.

So können Sie entweder die Methode forceActiveFocus(), die über die Fokus-Hierarchie durchlaufen wird, und für jeden FocusScope den Fokus anfordert, oder stellen Sie die focus -property zu true für jede Schicht in der Hierarchie.

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 
     } 
    } 
} 
Verwandte Themen