首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用信号或全局变量进行Qt/QML MainWindow和StackView页面通信

使用信号或全局变量进行Qt/QML MainWindow和StackView页面通信
EN

Stack Overflow用户
提问于 2020-05-05 19:14:14
回答 1查看 132关注 0票数 1

我想为StackView的不同页面实现键处理程序。StackView的问题在于它使用"item“属性来显示qml页面。因此,在StackView页面中声明的内容(例如HomePage.qml)对于main.qml是不可见的,因为它没有被显式实例化。

为了克服这个问题,我尝试在window中声明一个信号,并将其回调放在StackView页面中(这很愚蠢,但请建议您还能做些什么)。下面是它的大致外观:

代码语言:javascript
复制
main.qml
-----------
Window {
    id: window

    signal keyReceived();
    property var key;

    StackView {
        id:stackView
        initialItem: "HomePage.qml"
    }
}

HomePage.qml
-------------
Page {
    id: homePage
    window.onKeyReceived:{
         // Here "window" is not recognized, since this type of use does not exist?
    }
}

总而言之,我希望能够声明一个在main.qml和HomePage.qml中都可见的全局变量,并能够在该变量发生更改时发出通知。无论是信号还是其他东西,都无关紧要。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 21:29:57

这就是了:

代码语言:javascript
复制
Page {
    id: homePage
    Connections {
        target: window
        onKeyReceived: {
        }
    }
}

这样做的原因是它在运行时通过StackViewWindow使用QML上下文链来解析window id引用。

第一种方法不起作用的原因是,对当前类型之上的信号处理程序的引用不是静态可解析的。也就是说,QML不知道谁将在运行时成为Page的父对象,因此它不能解析window的类型,因此也不能解析信号keyReceived的类型和参数。这些类型的引用只适用于当前类型和在其下静态定义的所有子类型。

因此,每当你需要连接到一个QML不能确定其静态定义的类型时(比如上下文链上的引用),你必须使用一个Connections对象,它将在运行时解决所有这些问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61611821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档