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

Posted

技术标签:

【中文标题】如何在 2 个 qml 窗口之间进行通信【英文标题】:How to communicate between 2 qml windows 【发布时间】:2017-03-03 10:33:47 【问题描述】:

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

如何捕捉鼠标点击列? 第二个窗口的最佳解决方案是:具有 2 列的表格视图(一列用于按钮,一列用于元素)?在这种情况下,我不确定如何设置第一列的值... 如何在 2 个 qml 窗口之间传递消息?从第一个窗口发送模型(列下的元素),从第二个窗口发送一个或多个值(取决于选中的按钮数量) 谢谢

【问题讨论】:

【参考方案1】:

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

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
        
    

【讨论】:

以上是关于如何在 2 个 qml 窗口之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章

2 个不同 QML 文件中的 2 个不同对象之间的通信

您如何在两个浏览器选项卡/窗口之间进行通信? [复制]

您如何在两个浏览器选项卡/窗口之间进行通信? [复制]

Android:如何在 2 个活动之间进行通信

如何在 2 个组件之间进行通信 - 兄弟组件(Angular 1.5.8)

如何在 Windows 服务之间进行通信