Как сделать SpinBox потерянным фокусом при нажатии на кнопки другого SpinBox в QML - PullRequest
0 голосов
/ 28 января 2019

У меня возникла конкретная проблема, когда я нажимаю на текст в середине SpinBox, и он получает фокус, но после этого я перехожу к другому SpinBox и нажимаю - или +Когда я делаю это, я хочу перевести фокус с последнего SpinBox на новое, чтобы это значение было принято.

В качестве примера, давайте предположим, что я нажимаю на верхний SpinBox: enter image description here

Теперь я нажимаю кнопку + внизу SpinBox, делая это, я хочу сфокусироваться на этом дне SpinBox

enter image description here

Я предоставляю код main.qml ниже:

import QtQuick 2.9
import QtQuick.Controls 1.4
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls.Styles 1.4

ApplicationWindow {
    id: window
    title: "Stack"
    visible: true
    height: 200
    width: 400
    ListModel {
        id: libraryModel
        ListElement {
            text: "A Masterpiece"
        }
        ListElement {
            text: "Brilliance"
        }
        ListElement {
            text: "Outstanding"
        }
    }

    Item {
        id: page
        anchors.fill: parent
        width:parent.width
        height: parent.height
        ScrollView {
            id:scrollView
            anchors.fill:parent
            style: ScrollViewStyle{
                handle: Rectangle {
                    implicitWidth: 30
                    color:  "black"
                }
                scrollToClickedPosition: true
                transientScrollBars:true
            }
            function scrollToY(y) {
                scrollView.contentItem.contentY = y;
            }
            Column{
                width:parent.width
                spacing:10
                TextField {
                    id:textField
                    implicitHeight: 30
                    font.bold: true
                    onFocusChanged: if(focus) { scrollView.scrollToY(y); }
                }
                ComboBox {
                    id:comboBox
                    anchors.topMargin: 10
                    textRole: "text"
                    model: libraryModel
                    onFocusChanged: if(focus) { scrollView.scrollToY(y); }
                }
                SpinBox {
                    width: 100
                    height: 30
                    editable: true
                }
                SpinBox {
                    width: 100
                    height: 30
                    editable: true
                }
            }
        }
    }
}

Как это можно сделать?

1 Ответ

0 голосов
/ 28 января 2019

Вы можете использовать focusPolicy:

import QtQuick 2.0
import QtQuick.Controls 2.0

ApplicationWindow {
    id: window
    height: 200
    width: 400
    visible: true

    Column{
        spacing: 10

        SpinBox {
            width: 100
            height: 30
            editable: true
        }
        SpinBox {
            width: 100
            height: 30
            editable: true
            focusPolicy: Qt.ClickFocus // or Qt.StrongFocus
        }
    }
}

Qt.ClickFocus даст фокус на элемент управления при нажатии, Qt.TabFocus для вкладки, Qt.WheelFocus для колеса,Qt.StrongFocus для всех трех.

...