Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么QML连接在这里不起作用?_Qt_Qml - Fatal编程技术网

Qt 为什么QML连接在这里不起作用?

Qt 为什么QML连接在这里不起作用?,qt,qml,Qt,Qml,我正在学习QML并设计一个混合QML/C++应用程序,该应用程序将在嵌入式Linux上运行 到目前为止,我有4个页面(Page0.qml,Page1.qml,Page2.qml,Page3.qml),我正试图通过堆栈视图在其中导航 所有qml文件都位于qml.qrcressource文件中 每个页面的定义如下: // Page0.qml import QtQuick 2.9 import QtQuick.Controls 2.2 Page { id: root signal

我正在学习QML并设计一个混合QML/C++应用程序,该应用程序将在嵌入式Linux上运行

到目前为止,我有4个页面(
Page0.qml
Page1.qml
Page2.qml
Page3.qml
),我正试图通过
堆栈视图在其中导航

所有qml文件都位于
qml.qrc
ressource文件中

每个
页面
的定义如下:

// Page0.qml
import QtQuick 2.9
import QtQuick.Controls 2.2

Page {
    id: root

    signal pageRequested(string pageUrl)

    background: Rectangle {
        anchors.fill: parent
        color: "orange"
    }

    Button {
        text: "Page 1"
        width: 100
        height: 100
        anchors.top: text.bottom
        anchors.horizontalCenter: text.horizontalCenter
        anchors.horizontalCenterOffset: 10
        onClicked: { 
            console.log("Button clicked")
            root.pageRequested("PAGESGRP1/Page1.qml")
        }
    }

    Label {
        id: text
        text: "You are on Page 0."
        font.pointSize: 25
        anchors.centerIn: parent
    }    
}
主页为:

// main.qml
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Window 2.2
// qml files are not in the directory of main.qml
// that's why i have these "import" statement
import "PAGESWELCOME" // Page0.qml
import "PAGESGRP1" // Page1.qml
import "PAGESGRP2" // Page2.qml
import "PAGESGRP3" //Page3.qml

Window {
    id: window
    visible: true

    Item {
        id: baseItem
        rotation: 90
        width: 1024
        height: 1280
        anchors.centerIn: parent

        Page0 {
            id: page0
        }

        Page1 {
            id: page1
        }

        Page2 {
            id: page2
        }

        Page3 {
            id: page3
        }

        StackView {
            id: stackView
            initialItem: "PAGESWELCOME/Page0.qml"
            anchors.fill: parent
        }

        Connections {
            target: page0
            onPageRequested: { // This signal handler is never called 
                console.log("Page 0 request page : " + pageUrl)
                stackView.push(Qt.resolvedUrl(pageUrl))
            }
        }

        Connections {
            target: page1
            onPageRequested: {
                console.log("Page 1 request page : " + pageUrl)
                stackView.push(Qt.resolvedUrl(pageUrl))
            }
        }

        Connections {
            target: page2
            onPageRequested: { 
                console.log("Page 2 request page : " + pageUrl)
                stackView.push(Qt.resolvedUrl(pageUrl))
            }
        }

        Connections {
            target: page3
            onPageRequested: {
                console.log("Page 3 request page : " + pageUrl)
                stackView.push(Qt.resolvedUrl(pageUrl))
            }
        }

    }
}
我的问题是
StackView
始终保持在
Page0
上。点击一个按钮后什么也不会发生

更一般地说,Connections对象可以是某个对象的子对象 除信号发送者外:

正确的方法是什么


感谢您的帮助。

您可以将
连接的目标属性直接更改为StackView:

Connections {
    target: stackView.currentItem

    onPageRequested: { // This signal handler is never called
        console.log("Page 0 request page : " + pageUrl)
        stackView.push(Qt.resolvedUrl(pageUrl))
    }
}
因此,您可以从“PageX”容器组件中删除所有其他
连接
元素

编辑:(来自eyllanesc的提示)

您可以从
main.qml
中完全删除PageX{}元素。它们不被使用,因为您不会将这些元素推送到
StackView
上,而是从传递的Qml Url实例化一个新元素


因此,您的
连接
容器无法工作。

您可以直接将
连接
元素的目标属性更改为StackView:

Connections {
    target: stackView.currentItem

    onPageRequested: { // This signal handler is never called
        console.log("Page 0 request page : " + pageUrl)
        stackView.push(Qt.resolvedUrl(pageUrl))
    }
}
因此,您可以从“PageX”容器组件中删除所有其他
连接
元素

编辑:(来自eyllanesc的提示)

您可以从
main.qml
中完全删除PageX{}元素。它们不被使用,因为您不会将这些元素推送到
StackView
上,而是从传递的Qml Url实例化一个新元素


因此,您的
连接
容器无法工作。

并且还应注意,在.qml中创建的PageX{…}不是StackView中显示的对象。我建议您在问题中指出,我认为对于作者来说,理解其解决方案失败的原因是最重要的。还应该注意的是,在.qml中创建的PageX{…}不是StackView中显示的对象。我建议您指出,在您的问题中,我认为对于作者来说,理解其解决方案失败的原因是最重要的。