为何StackView内的ComboBox组件在Connections中未定义?求解决方案
解决QML中Connections无法访问Component内ComboBox的问题
问题原因
_tankList定义在Component内部,而Component本质是组件模板,内部元素的ID仅在组件实例化后的内部作用域生效。外部的Connections在程序启动时就会尝试访问_tankList,此时要么组件还没被实例化,要么外部作用域根本无法穿透Component的隔离,所以抛出ReferenceError。
可行解决方案
方案1:将Connections移到Component内部
把Connections放到_page1这个Component里面,两者处于同一作用域,就能直接访问_tankList:
TankModel { id: _model } StackView { id: _stack anchors.fill: parent initialItem: _page1 } Component { id: _page1 ComboBox { id: _tankList model: _model } // 移到Component内部,与_tankList同作用域 Connections { target: _model onModelUpdated: { _tankList.enabled = true; } } }
方案2:通过StackView的currentItem访问实例
给ComboBox添加objectName,然后通过StackView的currentItem获取实例化后的组件对象,再查找目标ComboBox:
TankModel { id: _model } Connections { target: _model onModelUpdated: { // 从当前栈项中查找ComboBox实例 const tankCombo = _stack.currentItem.findChild(QtObject, "tankList"); // 加判断避免空指针 if (tankCombo) { tankCombo.enabled = true; } } } StackView { id: _stack anchors.fill: parent initialItem: _page1 } Component { id: _page1 ComboBox { id: _tankList objectName: "tankList" // 添加objectName用于查找 model: _model } }
内容的提问来源于stack exchange,提问作者Compozitor
相关产品推荐
相关产品推荐

