2 个不同 QML 之间的 QML 信号和时隙

Posted

技术标签:

【中文标题】2 个不同 QML 之间的 QML 信号和时隙【英文标题】:QML signal and slot between 2 different QML 【发布时间】:2021-04-30 05:18:05 【问题描述】:

我需要根据 button.qml 中的按钮按下来在 main.qml 中执行一些操作。按钮 QML 内的按钮位于某个自定义对象内。让我们给它一个名字customObject。所以 button.qml 中的 customObject 看起来像这样:

customObject 
id:trialObject
signal backPagePressed()

Button 
id:button1
MultitouchArea 
onPressed:

   trialObject.backPagePressed()

现在当我按下按钮时,它会发出backPagePressed()。我的问题是:如何在主 QML 中为这个信号创建一个插槽?我熟悉 C++ 中的信号和槽机制,但这不适用于 QML。我在 main.qml 中做了这样的事情:

Loader 

  id:pageLoader
  onBackPagePressed:

  pageLoader.source =""


那部分需要删除Loader的源码,才能回到之前的页面。但是,我不确定onBackPagePressed: ...如何将我的信号backPagePressed 连接到加载程序中的相关部分?

【问题讨论】:

【参考方案1】:

您应该将Connections 对象(记录在here)与Loaderitem 属性一起使用:

Loader 
    id: pageLoader 
    source: "CustomObject.qml"


Connections 
    target: pageLoader.item

    //Qt < 5.15
    onBackPagePressed: pageLoader.source = ""

    //Qt >= 5.15
    function onBackPagePressed()
    
        pageLoader.source = ""
    

【讨论】:

我将该连接创建为 Loader 的兄弟。但它找不到 onBackPagePressed。是否与该信号在另一个 qml 中有关? 我的意思是孩子不是兄弟姐妹* 您应该将source 设置为具有信号的CustomObject。它确实可以是兄弟姐妹 如何设置源?文档中没有说明。我对 QML 很陌生。 @Amfasis 您应该更新您的答案以描述自 Qt 5.15 以来的新连接语法,例如 function onBackPagePressed() 而不是 onBackPagePressed:

以上是关于2 个不同 QML 之间的 QML 信号和时隙的主要内容,如果未能解决你的问题,请参考以下文章

如何将信号从一个 qml 发送到另一个

从同一选项卡窗格中的不同 qml 选项卡访问属性

QML 在匿名孙子之间发送信号

QML - 带有默认参数的信号

将 QML 信号连接到 PySide2 插槽

27.Qt Quick QML-StateTransition