我是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
}
}
答案 0 :(得分:0)
在qml中,项目具有属性。你应该声明属性。没有你的整个代码我真的不能给你一个更详细的答案。只需查看this
即可答案 1 :(得分:0)
在QML中,id
s 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
}
}