【问题标题】:QML how to save variable value while changing to anothe qmlQML如何在更改为另一个qml时保存变量值
【发布时间】:2021-05-03 09:35:57
【问题描述】:

我想在更改 QML 时保存变量的值,然后再次返回相同的 qml。我怎样才能做到这一点?当我打开相应的 QML 后,该值将归零。 我使用加载器从我的 main.qml 打开新的 qml。

RightButtons
{
     MultiPointTouchArea
     {
         onPressed:
         {
             pageLoader.source="CTISpage.qml"
         }
     }
}

这是我的装载机

Loader
{
     id:pageLoader
     Connections
     {
         target:pageLoader.item
         onBackButtonPressed:
         {
             pageLoader.source=""
         }
     }
}

所以当我按下按钮时,我设置了加载程序的新源并打开了页面,当我按下后退按钮时,我从新页面中将加载程序的源设置为一个空字符串并使其返回到我的 main.qml .

问题是:在新的 qml 中,我使用了一个布尔变量,我想在返回 main.qml 和返回这个 qml 之间保存它的值。但在这个过程中它一直归零。这是我的新 qml 的样子:

Item
{
     id: CTISPage.qml
     .
     .
     .
     signal backButtonPressed()
     property var isABSOffRoad:false

    .
    .
    .

    LeftButtons
    {
        MultiPointTouchArea
        {
            onPressed:
            {
                isABSOffRoad=!isABSOffRoad
                if(ABSOffRoad)
                {
                    //Do sth if it is true
                }
            }
        }
    }
}

当我按下按钮并将布尔 isABSOffRoad 变量设置为 true 时,当我返回 main 并再次返回此 qml 时,它会变为 false。我还尝试在 main 中声明布尔变量,然后从此 qml 中访问该变量。然而,结果是一样的。我还尝试打开一个新的 variables.qml 文件并在该 qml 中声明所有变量并从那里访问它们。但这也不起作用。我该如何解决这个问题?

【问题讨论】:

  • 如果将变量放在main/variables.qml中,你是否将isABSOffRoad绑定到那个源?
  • 我认为这个例子会在最丑资源的比赛中获得第一名,抱歉跑题了

标签: javascript qt qml


【解决方案1】:

Loader 将根据设置source 和/或active 创建和销毁您指向它的组件。这意味着下次您将使用 Item 组件的新实例化,因此 isABSOffRoad 将恢复为默认值 false

如果您希望该状态持续存在,有两条基本路线:

  1. 不要卸载组件 - 换句话说,删除将 source 设置为 "" 的代码。您可以改用visible 来隐藏它。然后组件不会被销毁,isABSOffRoad 将保留其设置值。

  2. isABSOffRoad 属性添加到父组件,并使用Loader.setSource() 将其当前值传递给加载的组件。然后,您可以在 isABSOffRoad 发生更改时使用信号通知父组件,以便在您的组件卸载之前捕获并保留新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多