SpinBox中的KeyNavigation在QML中不起作用

时间:2019-02-27 10:22:09

标签: qt qml

我在代码KeyNavigation.tab属性中使用了使导航在qml中可行的方法。

但是控件SpinBox不能使用它。例如,如果我在它和要它导航的元素之间有一个控件,它将不遵守规则。

我将用一个真实的例子来说明。

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 1.4
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
        ScrollView {
            id:scrollView
            anchors.fill:parent
            Column{
                width:parent.width
                spacing:10
                TextField {
                    id:textField
                    KeyNavigation.tab: spinBox1
                    implicitHeight: 30
                    font.bold: true
                }
                SpinBox {
                    id: spinBox1
                    KeyNavigation.tab: spinBox2
                    width: 100
                    height: 30
                    editable: true
                }
                ComboBox {
                    id:comboBox
                    //KeyNavigation.tab: spinBox2
                    anchors.topMargin: 10
                    textRole: "text"
                }
                SpinBox {
                    id: spinBox2
                    KeyNavigation.tab: textField
                    width: 100
                    height: 30
                    editable: true
                }
            }
        }
    }
}

如果使用制表符,spinBox1不会跳到spinBox2

这已在Windows 10操作系统上进行了测试

使用的Qt版本是5.11.1

1 个答案:

答案 0 :(得分:0)

由于某些原因,如果附加属性是在SpinBox本身而不是在TextInput上设置的,则不会调用QQuickKeyNavigationAttached :: keyPressed()。因此,在contentItem上使用附加属性是一种解决方法:

    SpinBox {
        Component.onCompleted: contentItem.KeyNavigation.tab = spinBox
    }