将数据从一个窗口传递到另一个窗口(在同一个QML文件中)

时间:2017-09-29 17:40:29

标签: qt qml

我在同一个.qml文件中有两个Windows

Window1有textinput1button,当我按下button时,我想将textinput的字符串值发送到{{} 1}} Window2

我是Qt和QML的新手,在textInput2signalsLoaders上阅读了很多内容,并且无法实现这种转移。任何人都可以做一个简单的10行这种转移的例子吗?

properties

如果我这样做,它会给我 Window { id:window TextInput { id:text1 text: "This value is needed in the second Window!" } Button { onClicked: window2.open() } Window { id.window2 function open(){ visible = true } Text { text: text1.text } } } ,如何引用第一个ReferenceError: text1 is not defined中的text1

2 个答案:

答案 0 :(得分:1)

  

我在同一个.qml文件中有两个Windows。

如果您这样做,那么您的代码将起作用。由于它不起作用,我假设每个窗口都在自己的qml文件中定义,并且你只在同一个qml文件中实例化这两个窗口。

  

如果我这样做,它会给我ReferenceError:text1没有定义,怎么可以   我从第一个窗口引用text1?

您必须首先引用该窗口,它应该提供一个引用该文本的界面。

请注意,理想情况下id只应用于引用同一来源中的内容。在极少数情况下,你可以走得更远,并引用id向下的对象树,但只有父母,而不是他们的外线孩子,它将适用于给予的内嵌儿童{{ 1}}在同一个来源中。这意味着如果在id内创建了window2,那么您就可以在window内引用window。但如果两个窗口都是另一个对象中的兄弟,则window2将无法解析。

id

在此示例对象树中,Obj1 Obj2 Obj4 Obj3 将从任何对象中解析。但是,Obj1如果在Obj3内提供了Obj2,则无法解析id,但Obj2 id会解析Obj2Obj1内给出。但是无法从Obj4解决Obj3。因为id不像属性那样,你不能someId.someOtherId,这只能用于属性。你也不能somePropertyObject.someId。您只能以id或属性开头,并且只能继续使用子属性。

id不适用时,可以将对象或属性公开为属性或属性别名。当你想暴露整个对象时,第一个是有用的,当你想暴露一个对象的特定属性时,第二个是有用的:

Item {      
  property Item innerItem: inner // gives you access to the "entire" inner object
  property alias innerWidth: inner.width // gives you access to a property of inner

  Item {
    id: inner
  }
}

您也可以使用别名别名。

答案 1 :(得分:1)

在这种情况下我更愿意使用信号:

Window {
    id: window1
    title: "window 1"
    visible: true
    width: 600
    height: 600
    signal someSignal()

    Button {
        anchors.centerIn: parent
        text: "Open window"
        onClicked: window1.someSignal()
    }

    Window {
        id: window2
        title: "window 2"
        width: 400
        height: 400
        // you can use this instead of Connections
        //Component.onCompleted: {
        //    window1.someSignal.connect(show);
        //}
    }

    Connections {
        target: window1
        onSomeSignal: {
            window2.show();
        }
    }
}

我认为这更多......你怎么说? ......更迫切 - )