2015-12-22 62 views
1

當用戶更改我的TabView中的當前選項卡時。我想將activeFocus設置爲當前選項卡中的頂層項目,例如使用forceActiveFocus。然而,出於某種奇怪的原因,即使Button設置了「focus:false」,TabView也會將activeFocus設置爲它在Tab中找到的第一個Button。 如下面的輸出所示。當我使用forceActiveFocus將焦點設置爲頂層Item時。首先Item獲得焦點,然後立即失去焦點,而Button獲得焦點。如果選項卡中沒有按鈕,則按預期工作。我需要關於解決這個問題的建議。我想知道這是一個錯誤還是我在這裏做錯了什麼?在QML TabView中將項目設置爲activeFocus時遇到問題

下面是用戶點擊第二個標籤時的程序輸出。

qml: Item Focus gained: Tab2 
qml: Button focus gained: Tab2 
qml: Item Focus lost: Tab2 

代碼舉例如下(Qt中5.4.2測試):

import QtQuick 2.4 
import QtQuick.Controls 1.3 
import QtQuick.Window 2.2 
import QtQuick.Dialogs 1.2 

ApplicationWindow { 
    width: 640 
    height: 480 
    visible: true 

    TabView { 
     id: tabView 

     onCurrentIndexChanged: { 
      getTab(currentIndex).forceActiveFocus(); 
     } 
    } 

    Component.onCompleted: { 
     var tab1 = tabView.addTab("tab1", tabComp); 
     tab1.active = true; 
     tab1.item.objectName = "Tab1"; 

     var tab2 = tabView.addTab("tab2", tabComp); 
     tab2.active = true; 
     tab2.item.objectName = "Tab2"; 
    } 

    Component { 
     id: tabComp 
     Item { 
      focus: true 
      onActiveFocusChanged: { 
       if(activeFocus) 
        console.log("Item Focus gained: " + objectName); 
       else 
        console.log("Item Focus lost: " + objectName); 
      } 

      Button { 
       focus: false 
       onActiveFocusChanged: { 
        if(activeFocus) 
         console.log("Button focus gained: " + parent.objectName); 
        else 
         console.log("Button focus lost: " + parent.objectName); 
       } 
      } 
     } 
    } 
} 

回答

0

當點擊一個標籤,TabView的是activeFocus設置爲與activeFocusOnTab組的第一項。按鈕的默認設置爲true。我通過將activeFocusOnTab設置爲false來解決此問題。這與QML中通常的焦點管理有點不一致,因爲我通常認爲「焦點」屬性意味着優先於「activeFocusOnTab」進行初始焦點,但在這種情況下它會被忽略。

相關問題