当用户更改我的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);
}
}
}
}
}