假设我们有一个如下的QML文件:
Window {
Component.onCompleted: rect.color ="green"
TabView {
Tab {
Rectangle {
id: rect
color: "white"
}
}
}
}
当我运行此代码时,由于某种原因,它给了我这个错误:
ReferenceError:未定义rect
有人可以说它是一个范围问题,但以下代码运行良好:
Window {
Component.onCompleted: rect.color ="green"
Item {
Item {
Rectangle {
id: rect
color: "white"
}
}
}
}
在我的情况下,我有一个包含选项卡和控件的大表单,我将所有控件传递给多个函数来验证表单,即一些代码如下:
function onClose() {
validate(control1);
validate(control2);
// etc
}
但是在id
访问控件时,我收到了上述错误。
答案 0 :(得分:0)
如何将矩形绑定到颜色参数而不是硬编码值?
这将进一步分离您的模型和视图代码,以使其在项目的其他位置更具可读性...尝试:
Window {
property string myColor: "White"
Component.onCompleted: myColor = "Green"
TabView {
Tab {
Rectangle {
id: rect
color: myColor
}
}
}
}
要查看QML对象树,您需要以调试模式启动项目。然后拆分代码窗口,以显示“本地和表达式”视图(右侧复选框勾选)。您将看到您的根项和嵌套在树中的所有其他控件,现在您可以直接编辑其属性的值,并且更改将立即呈现。有一个关于调试的youtube视频教程:https://youtu.be/mPXn6L2Wftc?t=19m55s
我不确定树是否会让您在运行时访问控件,但它可能会帮助您进行调试。
答案 1 :(得分:0)
好的,因为无法从外部访问Tab
项目,我认为可以通过这种方式完成:
TabView {
id: tabView
Tab {
title: "tab1"
function validate() { /* validate all the controls related to tab1 only */ }
Item { id: item1 }
Item { id: item2 }
}
Tab {
title: "tab2"
function validate() { /* validate all the controls related to tab2 only */ }
Item { id: item3 }
Item { id: item4 }
}
function validateTabs() {
for(var i = 0; i < tabView.count;i ++) {
var tab = tabView.getTab(i);
if(tab && tab.active && tab.item.validate) {
if(!tab.item.validate())
return false;
}
}
return true;
}
}
好的一点是,如果某些Tab
未被打开且未更改,则无法进行验证。