【问题标题】:QML signal and slot between 2 different QML2 个不同 QML 之间的 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 连接到加载程序中的相关部分?

【问题讨论】:

    标签: qt qml


    【解决方案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: {
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多