当用户更改我的TabView中的当前选项卡时。我想将activeFocus设置为当前标签中的顶级项目,例如使用forceActiveFocus。然而,由于一些奇怪的原因,TabView将activeFocus设置为它在Tab中找到的第一个Button,即使该Button具有“focus:false”设置。 如下面的输出所示。当我使用forceActiveFocus将焦点设置为顶级项目时。首先,Item获得焦点,然后它会立即失去焦点而Button会获得焦点。如果选项卡中没有Button,则它按预期工作。我需要就解决这个问题的方法提出建议。我想知道这是一个Bug还是我在这里做错了什么?
以下是用户点击第二个标签页时的程序输出。
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 :(得分:0)
单击选项卡时,TabView会将activeFocus设置为设置了activeFocusOnTab的第一个项目。默认情况下,Button将此设置为true。我通过将Button的activeFocusOnTab设置为false来解决这个问题。这与QML中的常规焦点管理有点不一致,因为我认为“焦点”属性通常优先于“activeFocusOnTab”用于初始焦点,但在这种情况下它被忽略。