2017-04-23 15 views
1

QML에서는 단일 개체 만 키보드 포커스 (창당)를 가질 수 있습니다. 내 응용 프로그램에서는 키보드 포커스가있는 여러 객체가있는 옵션이 필요하므로 사용자 정의 다중 선택 구현과 함께 사용자 지정 이벤트 디스패처를 사용합니다.컨트롤이 키보드 포커스를 훔치는 것을 방지합니다.

그러나 Stock 컨트롤 요소를 클릭 할 때마다 자동으로 포커스를 훔쳐서 사용자 지정 이벤트 디스패처를 위반하는 것이 문제입니다.

오버레이 팝업과 같은 경우에는 다른 포커스 항목을 명시 적으로 설정할 수 있어야합니다. 나는이 인터페이스 결국

답변

0

는 모든 초점 할 항목에 적용 : 만 오버레이 대화 상자가 이벤트 디스패처에서 초점을하기로되어 있기 때문에

Item { 
    onFocusChanged: if (keepFocus) focus = true 
    property bool keepFocus: false 
    property Item prevFocus: null 
    function getFocus() { 
    if (prevFocus) { 
     prevFocus.keepFocus = false 
     keepFocus = true 
     focus = true 
    } 
    } 
    function restoreFocus() { 
    if (prevFocus) { 
     keepFocus = false 
     prevFocus.keepFocus = true 
     prevFocus.focus = true 
    } 
    } 
} 

대화 기본 유형이 자동으로 획득 및 복원 처리 대화 표시 및 숨기기에 중점을 둡니다.

"하나의 항목에 포커스가있을 수 있습니다." "하나의 항목에 명시 적으로 포커스가있을 수 있습니다"로 이동하여 컨트롤 요소가 컨트롤을 도용 할 때마다 포커스를 다시 활성화합니다.

1

맞춤 이벤트와 어울리는지 잘 모르겠지만이 답변은 질문을 찾았지만 컨트롤이 포커스를받지 못하게하는 다른 사용자에게 도움이 될 수 있습니다.

당신은 focusPolicy enum에 초점을 얻기에서 컨트롤을 방지 할 수 있습니다 :

Button { 
    focusPolicy: Qt.NoFocus 
    // Other options: 
    // focusPolicy: Qt.TabFocus - The control accepts focus by tabbing. 
    // focusPolicy: Qt.ClickFocus - The control accepts focus by clicking. 
    // focusPolicy: Qt.StrongFocus - The control accepts focus by both tabbing and clicking. 
    // focusPolicy: Qt.WheelFocus - The control accepts focus by tabbing, clicking, and using the mouse wheel. 
} 
+0

이 트릭을 할, 그러나 그것은 모든 제어 요소에 수동으로 추가해야하는 불편 함을 추가도 할 수 있습니다. 전역 기본 설정을 무시할 수있는 경우가 아니면 덜 바람직한 옵션으로 설정하십시오. 그럴 수있어? – dtech

+0

아, 맞아 ... 아니, 내가 알고 있는게 아니야. 그런 기능을 추가하는 것이 문제가되지 않는다고 생각합니다. 내가 올바르게 기억한다면, 어떤 시점에서 호버 지원을위한 유사한 환경 변수가있었습니다. – Mitch