QT 5.7 QML如何控制哪个控件在TabView中获得焦点

时间:2016-08-05 15:15:53

标签: qt qml qtquickcontrols

我想安排一个特定的控件,让焦点集中在TabView Tab。无论我做什么,似乎第一个得到了关注。我尝试过在其他任何地方设置focus:false,但它不起作用。

请考虑以下代码。我有一个包含两个RadioButton和一个TextField的简单列。我想安排TextField在选择标签时始终获得焦点,但它始终会转到第一个RadioButton

import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3

ApplicationWindow
{
    visible: true
    width: 800
    height: 400

    TabView
    {
        anchors.fill: parent

        Tab { title: "tab1"; sourceComponent: foo }
        Tab { title: "tab2"; sourceComponent: foo }
    }

    Component
    {
        id: foo
        ColumnLayout
        {
            spacing: 32
            ExclusiveGroup { id: optionGroup }

            RadioButton
            {
                // i always get the focus!!
                exclusiveGroup: optionGroup
                text: "Click me"
                activeFocusOnPress: true
                focus: false
            }

            RadioButton
            {
                exclusiveGroup: optionGroup
                text: "No, click me!"
                activeFocusOnPress: true
                focus: false
            }

            TextField
            {
                // but i want the focus
                placeholderText: "type here"
                focus: true
            }
        }
    }
}

按“tab2”查看,

enter image description here

我通过添加

尝试在TabView内强制执行

onCurrentIndexChanged: getTab(currentIndex).item.forceActiveFocus()

但它没有任何区别。

我已经阅读了焦点的解释,但在这种情况下没有帮助。

感谢您的任何建议或帮助,

1 个答案:

答案 0 :(得分:0)

可能是一个错误。请改为Qt Quick Controls 2.0

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3

ApplicationWindow {
    visible: true
    width: 800
    height: 400

    header: TabBar {
        id: bar
        width: parent.width
        TabButton {
            text: qsTr("tab1")
        }
        TabButton {
            text: qsTr("tab2")
        }
    }

    StackLayout {
        anchors.fill: parent
        currentIndex: bar.currentIndex

        ColumnLayout {
            id: columnLayout
            spacing: 32

            ButtonGroup {
                id: optionGroup
                buttons: columnLayout.children
            }

            RadioButton {
                text: "Click me"
            }

            RadioButton {
                text: "No, click me!"
            }

            TextField {
                placeholderText: "type here"
                focus: true
            }
        }
    }
}