2017-02-17 13 views
2

qml 파일로드시 TextField 포커스를 활성화하려고합니다. 그러나 작동하지 않습니다. TestUi.qml 파일을로드 한 후 몇 가지 버튼과 onClick 메서드를 넣었습니다. recipientView.focus = true, 제대로 작동합니다. 문제는 뷰를 처음로드 할 때 기본 포커스가 활성화되지 않는다는 것입니다.Qt QML StackView 페이지를 표시 할 때 항목 (TextField)에 초점 맞추기

TestUi.qml

import QtQuick 2.0 
import QtQuick.Controls 2.1 
import QtQuick.Layouts 1.0 


Page { 

    function init() { 
     recipientView.focus = true; 
    } 

    TextField { 
     id: recipientView 
     Layout.fillWidth: true 
     font.pixelSize: 18 
     inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhEmailCharactersOnly 
     focus: true 
     placeholderText: "Email" 

    } 
} 

main.qml

onComposeBtnClicked: { 
    rootStackView.push(test) 
    test.init() 
} 

TestUi { 
    id: test 
    visible: false 
} 
+0

'Component.onCompleted : recipientView.focus = true;'를 통해 설정하려고 했습니까? – DuKes0mE

+0

앱로드가 시작되면 Component.onCompleted가 어떤 페이지인지와 상관없이 실행됩니다. 나는 아무 도움도하지 않았다 – nAkhmedov

답변

3

당신이 rootStackView.push(test)으로 스택에 TestUi을 추진하고 있기 때문 단순히이다. 이렇게하면 초점이 재설정됩니다. 일반적으로 초점은 이 다시 초점을 맞출 때 QFocusScope으로 처리되며 포커스가있는 항목을 기억하고 포커스를 다시 돌려줍니다. 페이지가 표시 될 때 사용자의 기본 페이지에 QFocusScope을 추가 귀하의 경우에는

이 제대로 초점을 복원 가능합니다 : 당신이 때 초점을 재설정할지

StackView { 
    id: stackView 
    initialItem: firstPage 
    onCurrentItemChanged: { 
     currentItem.forceActiveFocus() 
    } 
} 

Page { 
    id: firstPage 
    onFocusChanged: { 
     scope.focus = true 
    } 
    FocusScope { 
     id: scope 
     TextField { 
      focus: true 
      // ... 
     } 
    } 
} 

그런 다음 페이지 처리기 onVisibleChanged을 사용할 수 있습니다 사용자는 포커스가있는 곳을 암기하는 대신 (예를 들어 팝 후에) 다시 돌아옵니다. 그러나이 경우 FocusScope가 과도 할 수도 있습니다.

첫 번째 페이지를 설정하려면 StackView 속성 initialItem을 사용할 수도 있습니다.

+0

너를 고맙다! 그것은 잘 작동 – nAkhmedov

+0

나는 메인 페이지에 초점을 설정해야합니다. 나에게 단지 을 CurrentItemChanged에 추가했다. { currentItem.forceActiveFocus() } to main.qml. 그리고 Target.scope를 내 대상 파일에 추가하면 오류가 발생했습니다. – KOHTPOJIEP