选项卡不活动时未定义的元素
Posted
技术标签:
【中文标题】选项卡不活动时未定义的元素【英文标题】:Undefined element when tab is not active 【发布时间】:2015-03-12 20:59:34 【问题描述】:当我尝试访问 Tab 元素的子元素时,如果它不是活动的,QML 会抛出一个错误,说是 undefined
。
main.qml
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.0
ApplicationWindow
TabView
Tab
id: mytab1
Tab
id: myTab2
Rectangle
//(...)
Connections
target: eventManager
onData:
var scene = myTab2.children[0];
console.log(scene);
所以,如果 myTab2 处于活动状态,我可以在控制台中看到 QQuickItem_QML_15(0x27f1e2e0)
。如果 myTab2 未激活,则 qml 抛出 TypeError: Cannot read property 'children' of undefined
。
如果选项卡未处于活动状态,为什么未定义?我该如何解决?
谢谢!
【问题讨论】:
【参考方案1】:从Qt documentation 网站,我找到了解决方案。
标签被延迟加载;仅已变为当前的选项卡(对于 例如,通过单击它们)将具有有效内容。你可以强制 通过将 active 属性设置为 true 来加载选项卡:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.0
ApplicationWindow
TabView
Tab
id: mytab1
active: true
Tab
id: myTab2
active: true
Rectangle
//(...)
Connections
target: eventManager
onData:
var scene = myTab2.children[0];
console.log(scene);
所以,我在两个选项卡中都添加了属性active: true
,它工作正常!
【讨论】:
【参考方案2】:TabView
在激活选项卡之前不会创建其内容项。
您的示例从选项卡 1 开始,此时选项卡 2 中的矩形不存在,因此您得到 undefined
。如果您激活选项卡 2,将创建矩形,然后如果您返回选项卡 1,您将不会得到 undefined
。
Tab
继承了 Loader
,并带有 active
属性。我想Loader
组件中存在一个优化,可以延迟加载直到元素变得可见。如果您在Tab
中设置active: true
,它将在选项卡激活之前加载。请注意,这不会使选项卡视图在第二个选项卡处于活动状态时打开。
Tab
id: t2
active: true
Rectangle
【讨论】:
以上是关于选项卡不活动时未定义的元素的主要内容,如果未能解决你的问题,请参考以下文章