QtQuick.Controls 2.12 не показывает фокус на кнопках - PullRequest
1 голос
/ 23 сентября 2019

Я использую QtQuick.Controls 2.12 , и я пытаюсь отобразить окно с 3 кнопками, где одна из кнопок будет иметь фокус.С QtQuick.Controls 1.4 все в порядке, а Button1 имеет фокус (синяя рамка):

enter image description here

Но с QtQuick.Controls 2.12 это результат:

enter image description here

Если я нажму Tab фокус будетпередано Button2, Button3, Button1 ...

enter image description here

Я также пытался с принудительной фокусировкой, но безрезультатно.

Это 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"
        }
    }
}

Я пытаюсь получить это при запуске окна:

enter image description here

1 Ответ

2 голосов
/ 23 сентября 2019

Свойство, которое позволяет выделять, имеет значение visualFocus, и, если документы проверяются:

visualFocus: bool [только для чтения]

Это свойство определяет, имеет ли элемент управления визуальный фокус. Это свойство имеет значение true, когда элемент управления имеет активную фокусировку, и причиной фокусировки является либо Qt.TabFocusReason, Qt.BacktabFocusReason, либо Qt.ShortcutFocusReason.

В общем, для визуализации фокусировки клавиш этосвойство предпочтительнее Item :: activeFocus.Это обеспечивает фокусировку клавиш только при взаимодействии с клавишами, но не при взаимодействии с помощью прикосновения или мыши.

См. Также focusReason и Item :: activeFocus.

(выделениемой)

Таким образом, вы должны использовать forceActiveFocus(), но передавая одну из указанных причин, потому что, если вы не передаете аргументы, причина - Qt :: OtherFocusReason, как указано в документации:

forceActiveFocus (причина)

Это перегруженная функция.

Включает активную фокусировку на элементес указанной причиной.

Этот метод устанавливает фокус на элемент и гарантирует, что все объекты-предки FocusScope в иерархии объектов также получают фокус.

Этот метод был представлен в Qt 5.1.

См. Также activeFocus и Qt :: FocusReason.


forceActiveFocus ()

ForcesАктивный фокус на элемент.

Этот метод устанавливает фокус на элемент игарантирует, что все предшествующие объекты 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: <b>button1.forceActiveFocus(Qt.TabFocusReason)</b>
}
...