QML Loader:设置 "source:" 属性 一次且仅一次
QML Loader: set "source:" property once and only once
大家早上好,
我必须维护一个现有的 QML 应用程序(我无法完全重写),我们需要延迟大部分页面的加载,这样应用程序的启动会更快。
即:我需要加载一个页面,一次且仅一次,在某个时候我需要在之后保持加载(我有足够的 RAM)。
所以,我想我可以这样写:
Loader {
id: _userInfoLoader;
source: (status != Loader.NULL || Global.currMenuId == MenuIds.SETTINGS) ? "pages/PageUserInfo.qml" : "" ;
}
此代码用于在“设置”页面打开时加载“用户信息”页面(即当模型变量 Global.currMenuId == SETTINGS 时)
(注意:“用户信息”页面是“设置”页面的子页面,因此在显示“父页面”时加载它就足够了)。
加载此页面“用户信息”后,其状态将不再为 Null,而是“就绪”、“正在加载”或“错误”,因此“来源:”属性 应该一旦设置就不再更改。
这样做,我得到了可怕的错误:
QML Loader: Binding loop detected for property "source"
你知道怎么解决吗?预先感谢您的想法...
我认为循环是 Global.currMenuId == MenuIds.SETTINGS
为真 -> source
已设置 -> status
已更新 -> source
已再次设置 -> status
再次更新 -> source
再次设置 ....
如果你想让它只做一次,你可以使用Connections
和程序代码:
Loader {
id: _userInfoLoader;
Connections {
target: Global
onCurrMenuIdChange: {
if (!_userInfoLoader.source && Global.currMenuId == MenuIds.SETTINGS) {
_userInfoLoader.source = "pages/PageUserInfo.qml";
}
}
}
}
大家早上好,
我必须维护一个现有的 QML 应用程序(我无法完全重写),我们需要延迟大部分页面的加载,这样应用程序的启动会更快。
即:我需要加载一个页面,一次且仅一次,在某个时候我需要在之后保持加载(我有足够的 RAM)。
所以,我想我可以这样写:
Loader {
id: _userInfoLoader;
source: (status != Loader.NULL || Global.currMenuId == MenuIds.SETTINGS) ? "pages/PageUserInfo.qml" : "" ;
}
此代码用于在“设置”页面打开时加载“用户信息”页面(即当模型变量 Global.currMenuId == SETTINGS 时)
(注意:“用户信息”页面是“设置”页面的子页面,因此在显示“父页面”时加载它就足够了)。
加载此页面“用户信息”后,其状态将不再为 Null,而是“就绪”、“正在加载”或“错误”,因此“来源:”属性 应该一旦设置就不再更改。
这样做,我得到了可怕的错误:
QML Loader: Binding loop detected for property "source"
你知道怎么解决吗?预先感谢您的想法...
我认为循环是 Global.currMenuId == MenuIds.SETTINGS
为真 -> source
已设置 -> status
已更新 -> source
已再次设置 -> status
再次更新 -> source
再次设置 ....
如果你想让它只做一次,你可以使用Connections
和程序代码:
Loader {
id: _userInfoLoader;
Connections {
target: Global
onCurrMenuIdChange: {
if (!_userInfoLoader.source && Global.currMenuId == MenuIds.SETTINGS) {
_userInfoLoader.source = "pages/PageUserInfo.qml";
}
}
}
}