如何在2个qml窗口之间进行通信

时间:2017-03-03 10:33:48

标签: qt qml

我对QML有一些疑问。我有一个TableView,当我点击列标题时,我需要打开一个新窗口,其中包含该列下的所有元素,每个元素左侧都有一个按钮。
单击该按钮应将消息发送回TableView以进行更新 我的问题是:

  • 如何抓住鼠标单击列?
  • 哪个是第二个窗口的最佳解决方案:一个有两列的tableview(一个用于按钮,一个用于元素)?在这种情况下,我不确定如何设置第1列的值......
  • 如何在2个qml窗口之间传递消息?从第一个窗口我发送模型(列下的元素)和第二个窗口我发回一个或多个值(取决于检查的按钮数量)

    谢谢

1 个答案:

答案 0 :(得分:1)

您可以在QML中的多个窗口之间进行通信,就像在任何其他两个Items之间进行通信一样,通过id引用它们或将它们分配给您以后用于的属性参考他们。 一个问题:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

Item {
    ApplicationWindow
    {
        id: appWindow
        width: 500
        height: 800
        visible: true

        ListModel {
            id: lm
            Component.onCompleted: {
                for (var i = 0; i < 42; i++) append( { message: 'Hellow World ' + i })
            }
        }

        ListView {
            id: lv
            width: 300
            height: 800
            model: lm
            delegate: Button {
                text: model.message
                onClicked: secondWindow.text = text
            }
        }
    }

    ApplicationWindow
    {
        id: secondWindow
        width: 500
        height: 800
        x: appWindow.x + 500
        y: appWindow.y
        visible: true
        property alias text: label.text

        Text {
            id: label
            anchors.centerIn: parent
        }
    }
}