QtQuick.Controls 2.12不在按钮上显示焦点

QtQuick.Controls 2.12不在按钮上显示焦点,qt,qml,qtquickcontrols2,Qt,Qml,Qtquickcontrols2,我正在使用QtQuick.Controls 2.12,我正在尝试显示带有3个按钮的窗口,其中一个按钮将具有焦点。使用QtQuick.Controls 1.4一切正常,按钮1有焦点(蓝色边框): 但是使用QtQuick.Controls 2.12的结果如下: 如果我按Tab键,焦点将传递到按钮2、按钮3、按钮1 我也尝试过力量集中,但没有结果 这是main.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.La

我正在使用QtQuick.Controls 2.12,我正在尝试显示带有3个按钮的窗口,其中一个按钮将具有焦点。使用QtQuick.Controls 1.4一切正常,按钮1有焦点(蓝色边框):

但是使用QtQuick.Controls 2.12的结果如下:

如果我按Tab键,焦点将传递到按钮2、按钮3、按钮1

我也尝试过力量集中,但没有结果

这是main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    RowLayout{
        anchors.fill: parent

        Button{
            id: button1
            text: "Button1"
            focus: true
        }
        Button{
            text: "Button2"
            onClicked: {
                button1.forceActiveFocus()
            }
        }
        Button{
            text: "Button3"
        }
    }
}
当窗口启动时,我尝试获取以下信息:


允许突出显示的属性是,如果审阅了文档:

此属性保存控件是否具有可视焦点这个 当控件具有活动焦点和焦点时,属性为true 原因为Qt.TabFocusReason、Qt.BacktabFocusReason或 Qt.ShortcutFocusReason.

通常,对于可视化关键焦点,此属性优于 项目::activeFocus。这确保了关键焦点仅在 与按键交互-不是通过触摸或鼠标进行交互

另请参见focusReason和Item::activeFocus

(强调矿山)

因此,您必须使用但传递指定的原因之一,因为如果您不传递参数,则正如文档所指出的,原因是Qt::OtherFocusReason:

这是一个重载函数

强制将活动焦点集中在具有给定原因的项目上

此方法将焦点设置在项目上,并确保 对象层次中的FocusScope对象也具有焦点

Qt5.1中介绍了这种方法

另请参见activeFocus和Qt::FocusReason


强制对项目进行主动聚焦

此方法将焦点设置在项目上,并确保 对象层次中的FocusScope对象也具有焦点

焦点更改的原因将是Qt::OtherFocusReason。使用 重载方法来指定焦点原因,以便更好地 焦点变化的处理

另请参见activeFocus

(强调矿山)

因此,解决方案是:

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    RowLayout{
        anchors.fill: parent

        Button{
            id: button1
            text: "Button1"
        }
        Button{
            text: "Button2"
        }
        Button{
            text: "Button3"
        }
    }

    Component.onCompleted: button1.forceActiveFocus(Qt.TabFocusReason)
}
窗口{
可见:正确
宽度:640
身高:480
标题:qsTr(“你好世界”)
行布局{
锚定。填充:父级
钮扣{
id:按钮1
文本:“按钮1”
}
钮扣{
文本:“按钮2”
}
钮扣{
文本:“按钮3”
}
}
Component.onCompleted:button1.forceActiveFocus(Qt.TabFocusReason)

}
允许突出显示的属性是,如果审阅了文档:

此属性保存控件是否具有可视焦点这个 当控件具有活动焦点和焦点时,属性为true 原因为Qt.TabFocusReason、Qt.BacktabFocusReason或 Qt.ShortcutFocusReason.

通常,对于可视化关键焦点,此属性优于 项目::activeFocus。这确保了关键焦点仅在 与按键交互-不是通过触摸或鼠标进行交互

另请参见focusReason和Item::activeFocus

(强调矿山)

因此,您必须使用但传递指定的原因之一,因为如果您不传递参数,则正如文档所指出的,原因是Qt::OtherFocusReason:

这是一个重载函数

强制将活动焦点集中在具有给定原因的项目上

此方法将焦点设置在项目上,并确保 对象层次中的FocusScope对象也具有焦点

Qt5.1中介绍了这种方法

另请参见activeFocus和Qt::FocusReason


强制对项目进行主动聚焦

此方法将焦点设置在项目上,并确保 对象层次中的FocusScope对象也具有焦点

焦点更改的原因将是Qt::OtherFocusReason。使用 重载方法来指定焦点原因,以便更好地 焦点变化的处理

另请参见activeFocus

(强调矿山)

因此,解决方案是:

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    RowLayout{
        anchors.fill: parent

        Button{
            id: button1
            text: "Button1"
        }
        Button{
            text: "Button2"
        }
        Button{
            text: "Button3"
        }
    }

    Component.onCompleted: button1.forceActiveFocus(Qt.TabFocusReason)
}
窗口{
可见:正确
宽度:640
身高:480
标题:qsTr(“你好世界”)
行布局{
锚定。填充:父级
钮扣{
id:按钮1
文本:“按钮1”
}
钮扣{
文本:“按钮2”
}
钮扣{
文本:“按钮3”
}
}
Component.onCompleted:button1.forceActiveFocus(Qt.TabFocusReason)
}