Qt 为什么QML连接在这里不起作用?
我正在学习QML并设计一个混合QML/C++应用程序,该应用程序将在嵌入式Linux上运行 到目前为止,我有4个页面(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
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中显示的对象。我建议您指出,在您的问题中,我认为对于作者来说,理解其解决方案失败的原因是最重要的。