nextItemInFocusChain函数在Mac上的qml中不起作用吗?

时间:2019-03-08 09:27:08

标签: qt qml

我有一个表单,其中我完成了一个自定义字段,该字段仅接受顶部,右侧和底部箭头。

但是要接受标签导航,我正在使用以下功能链:

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 :(得分:0)

打开System Preferences > Keyboard > Shortcuts,然后选择All Controls。默认情况下,macOS仅允许在“仅文本框和列表”之间进行标签导航。

macOS settings dialog