QML 部件获得焦点触发的全局槽函数 onActiveFocusItemChanged
在qml的window窗口中,假如添加里许多其他部件,当这些部件改变时,会有一个全局部件焦点改变槽函数触发,就是 onActiveFocusItemChanged
可以通过此槽函数就可以知道当前焦点在哪一个部件上,也可以做一些自动化测试等;
如下案例,在窗体中添加两个按钮,通过鼠标点击按钮或者键盘左右键触发焦点,最后onActiveFocusItemChanged 槽函数就会监听到有焦点事件了,可以通过activeFocusItem.objectName 将当前获得焦点的部件的名字打印出来,前提是部件有设置了名字。
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
color: "white"
Button {
id: btn1
width: 50
height: 50
objectName: "btn1"
background: Rectangle {
border.color: btn1.focus ? "red" : "black";
color: "pink"
}
// 键盘右键按下
Keys.onRightPressed: {
btn2.focus = true
}
}
Button {
id: btn2
x:70
width: 50
height: 50
objectName: "btn2"
background: Rectangle {
border.color: btn2.focus ? "red" : "black";
}
// 键盘左键按下
Keys.onLeftPressed: {
btn1.focus = true
}
}
// 焦点改变触发
onActiveFocusItemChanged: {
console.log("Active focus item changed", activeFocusItem, "object name:", activeFocusItem.objectName);
}
}