如何在qml和c ++中获取NavigationKey.up值?

时间:2015-11-27 22:26:17

标签: qt qml

我是qml的初学者。我已将KeyNavigation.up(在项目中)设置为另一个项目的ID(向下)。 为什么我无法在qml中检索KeyNavigation.up?

var x = down.KeyNavigation.up

更新: 这是一个例子。为什么我不能得到a.KeyNavigation.up?

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    visible: true

    TextField {
        id: up
        KeyNavigation.down: down
    }

    TextField {
        id: down
        KeyNavigation.up: up
    }

    function fun(){
        var x = up.KeyNavigation.down
    }
}

3 个答案:

答案 0 :(得分:0)

在qml中,项目具有属性。你应该声明属性。没有你的整个代码我真的不能给你一个更详细的答案。只需查看this

即可

答案 1 :(得分:0)

在QML中,ids must begin with a lowercase letter。如果你正在使用Qt Creator,那么只要你输入它就会看到这个问题。运行程序时,您会看到此错误:

IDs cannot start with an uppercase letter

所以,你要么手动输入你的代码来解决这个问题(不好主意)而你输错了id s,要么你没有运行它,这很奇怪。

使用小写id有效:

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true

    Component.onCompleted: print(a.KeyNavigation.up)

    Item {
        id: A

        KeyNavigation.up: b
    }

    Item {
        id: b
    }
}

输出:

qml: QQuickItem(0x596dcc9180)

答案 2 :(得分:0)

您的代码确实有效。

我没有看到您拨打fun()的位置,但如果您在onActiveFocusItemChanged: fun()之后添加行visible: true,则会看到x变量没问题。

import QtQuick 2.4
import QtQuick.Controls 1.3

ApplicationWindow {
    visible: true
    width: 500; height: 500

    onActiveFocusItemChanged: fun()

    function fun(){
        var x = up.KeyNavigation.down
        print("x = up.KeyNavigation.down: " + x.text)

        var y = x.KeyNavigation.up
        print("y = x.KeyNavigation.up: " + y.text)
    }

    TextField {
        id: up
        y: 50
        KeyNavigation.down: down
    }

    TextField {
        id: down
        y: 100
        KeyNavigation.up: up
    }
}