Qml:尝试JS global" header"可以通过qt项目中的每个qml文件访问/更新的文件,但是每个文件都创建自己的JS库实例?

时间:2016-06-02 03:54:15

标签: javascript qt qml

首先,我只用C和Qml真正编码,感觉就像是最酷最痛苦的语言。另外,只写了C,我对Qml术语并不完全流利,所以请耐心等待。

我有一个项目,其中主qml文件具有不同的状态,这会带来不同的"页面"。所以"页面"在一个单独的Qml文件中定义,该页面的实例在main.qml中创建,该实例将根据main.qml的状态可见。我想要可以在这些页面之间共享/更新的全局变量,因为一个页面显示的内容将取决于在另一个页面中发生变化的变量(例如按下按钮)。第一页将有多个按钮用于不同的选项,第二页将显示相同的格式,但具有与所选选项对应的信息。我一直试图通过使用JavaScript库as discussed here来实现这一点,我通常能够在各个文件中操作和引用变量,但这些更改似乎没有转移到其他文件。我怀疑每个文件都导入一个唯一的"实例"的图书馆。如何使这个库的功能类似于Qml中的C头文件?

一些简单的示例代码:

Var.js

//Var.js
.pragma library
var option = 1

main.qml

//main.qml
import QtQuick 2.0
import "Var.js" as Var

Rectangle {
    id: page
    state: "HOME_PAGE"
    ...

    Home_page{
        id: home_page
        objectName: "home_page"

        visible: true

        ...
    }

    Option_page{
        id: option_page
        objectName: "option_page"

        visible: false

        ...
    }

    states: [
        State {
            name: "HOME_PAGE"
            PropertyChanges { target: home_page; visible: true}
            PropertyChanges { target: option_page; visible: false}
        },
        State {
            name: "OPTION_PAGE"
            PropertyChanges { target: home_page; visible: false}
            PropertyChanges { target: option_page; visible: true}
        }
    ]

home_page.qml

//home_page.qml
import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
import "Var.js" as Var

Rectangle {
    id: home_page
    objectName: "home_page"

    ...

    Button {
        id: option1_button

        ...

        onClicked: {
            Var.option = 1
            page.state = "OPTION_PAGE"
        }
    }

    Button {
        id: option2_button

        ...

        onClicked: {
            Var.option = 2
            page.state = "OPTION_PAGE"
        }
    }

    etc...
}

option_page.qml

//option_page.qml
import QtQuick 2.0
import "Var.js" as Var

Rectangle {
    id: option_page
    objectName: "option_page"

    ...

    Text {

        ...

        text: "Option " + Var.option

     }
}

我尝试了上面链接中提到的单例方法但无法使其工作。我也尝试在库中创建一个JS函数来操作变量,然后从Qml中调用它,但是无济于事。

如果它有帮助我也在单个文件中遇到JS全局变量的问题。我一直在使用第三方qml对象作为按钮列表,我希望根据按下的按钮更新全局变量。当我显示变量时,通过文本对象,它不会在按下按钮时更新,但如果我也显示它,原始属性正在更新,则它会更新。

这不会更新全局变量

Text {

    ...

    text: "Option " + Var.button_pressed

}

ThirdPartyButtonList {
    id:button_list

    ...

    onIndexChanged:{
        Var.button_pressed = index
    }

}

但是这样做

Text {

    ...

    text: "Option " + Var.button_pressed + " " + button_list.index

}

ThirdPartyButtonList {
    id: button_list

    ...

    onIndexChanged:{
        Var.button_pressed = index
    }

}

0 个答案:

没有答案