2015-12-22 483 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”进行初始焦点,但在这种情况下它会被忽略。

相关问题