2017-02-13 47 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

嘗試'forceActiveFocus()'當'Component.onComplete' – derM

回答

1

的問題是這些:

您的焦點樹多層。每個FocusScope可以有一個孩子有焦點。所以,現在你有:

StackView -> Page -> TextEdit 

令我百思不解的是,Page行爲就好像它是一個FocusScope,但沒有記錄的方式。

這意味着,TextEdit不會有activeFocus除非PageStackView有。但需要activeFocus來檢索輸入。

所以,你可以使用的方法forceActiveFocus()將遍歷的焦點層次,並要求重點各FocusScope,或者你focus - 屬性設置爲true在每一個層次。

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 
     } 
    } 
} 
相關問題