Функция nextItemInFocusChain не работает в qml на Mac? - PullRequest
0 голосов
/ 08 марта 2019

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

Но чтобы принять навигацию по вкладкам, я использую следующую цепочку функций:

nextItemInFocusChain().forceActiveFocus()

Проблема в том, что это работает на windows, но не на mac ...

У меня есть формуляр, чтобы проиллюстрировать проблему, где рядом с этим "полем для текста кода" у меня есть comboBox, где я хочу, чтобы, когда пользователь нажимает tab в "поле для текста кода", чтобы перейти к .

Кажется, что он перемещается только к другим textFields, и spinBox, как у меня в примере, похоже, имеет textField как contentItem.

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

main.qml

import QtQuick 2.9
import QtQuick.Controls 2.0

ApplicationWindow {
    id: window
    title: "Stack"
    visible: true
    height: 200
    width: 400
    Item {
        id: page
        anchors.fill: parent
        width:parent.width
        height: parent.height
            Column{
                width:parent.width
                spacing:10
                TextField {
                    id:textField
                    KeyNavigation.tab: spinBox1
                    implicitHeight: 30
                    font.bold: true
                }
                SpinBox {
                    id: spinBox1
                    width: 100
                    height: 30
                    editable: true
                    Component.onCompleted: contentItem.KeyNavigation.tab = userCodeField
                }
                PanelCodeField {
                    id: userCodeField
                    width: 100
                    height: 30
                    KeyNavigation.tab: comboBox
                }
                ComboBox {
                    id:comboBox
                    anchors.topMargin: 10
                    model: [ "Banana", "Apple", "Coconut" ]
                    KeyNavigation.tab: spinBox2
                }
                SpinBox {
                    id: spinBox2
                    width: 100
                    height: 30
                    editable: true
                    Component.onCompleted: contentItem.KeyNavigation.tab = textField
                }
            }
    }
}

PanelCodeField.qml

import QtQuick 2.0

PanelTextField {
    height: 479.9
    visible: true
    maximumLength: 5
    font.pointSize: 12
    property bool jumpOnTab: false
    Keys.onPressed: {
        var c
        switch (event.key) {
        case Qt.Key_Up:
            c = String.fromCharCode(0x25B2)
            break
        case Qt.Key_Down:
            c = String.fromCharCode(0x25BC)
            break
        case Qt.Key_Right:
            c = String.fromCharCode(0x25B6)
            break
        case Qt.Key_Tab:
            if(jumpOnTab)
                nextItemInFocusChain().nextItemInFocusChain().forceActiveFocus()
            else
                nextItemInFocusChain().forceActiveFocus()
            event.accepted = true
            break
        default:
            event.accepted = true
            break
        }
        if (!event.accepted) {
            var s = text.concat(c)
            text = s.substr(Math.max(0,s.length-maximumLength), maximumLength)
            event.accepted = true
        }
    }
}

PanelTextField.qml

import QtQuick 2.0
import QtQuick.Controls 2.0

TextField {
    property var linkedData
    implicitHeight: 30
    font.bold: true
    implicitWidth:parent.width
}

Я что-то не так делаю для Mac OS X, или есть обходной путь?

1 Ответ

0 голосов
/ 08 марта 2019

Откройте System Preferences > Keyboard > Shortcuts и выберите All Controls. По умолчанию macOS допускает только навигацию по вкладкам между «Только текстовые поля и списки».

macOS settings dialog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...