Я использую QTQuick.controls 2.12 , и я пытаюсь отобразить окно с 3 кнопками, где один из кнопок будет иметь фокус. С qtquick.controls 1.4 все хорошо, и button1 имеет фокус (синяя рамка):

enter image description here

Но с помощью qtquick.controls 2.12 это результат:

enter image description here

Если я нажмет вкладку focus, передается на кнопку кнопку2, 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
peco 23 Сен 2019 в 20:49

1 ответ

Лучший ответ

Имущество, которое позволяет выделить, составляет {{x0} }, и если документы рассмотрены:

VisualFocus: Bool [только для чтения]

Это свойство удерживает, имеет ли элемент управления Visual Focus. <сильный> это Свойство верно, когда управление имеет активное внимание и фокус Причина является либо Qt.tabfocusreason, Qt.backtabfocusreason или Qt.shortcutfocusreason.

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

Смотрите также фокус измену и статьей :: ActiveFocus.

(курсив мой)

Итак, вы должны использовать forceActiveFocus() / a> Но прохождение одной из причин указано, потому что если вы не передаете аргументы, причина является Qt :: Otherfocuseasreason, как документы оказывают:

FORCEACTIVEFOCUS (причина)

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

Усиливает активное внимание на предмете с указанной причиной.

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

Этот метод был введен в Qt 5.1.

Смотрите также ActiveFocus и Qt :: Focuseion.


forceactivefocus ()

Заставляет активное сосредоточиться на предмете.

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

Причиной изменения фокусировки будет Qt :: Otherfocuseusreason . Использовать перегруженный метод для уточнения причина фокусировки, чтобы позволить лучше Обработка изменения фокуса.

Смотрите также 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)
}
4
eyllanesc 23 Сен 2019 в 18:40