【发布时间】:2025-11-28 08:35:02
【问题描述】:
我正在学习 QML 并设计将在嵌入式 Linux 上运行的混合 QML/C++ 应用程序。
到目前为止,我有 4 页(Page0.qml、Page1.qml、Page2.qml、Page3.qml),我正在尝试使用 StackView 在它们之间导航。
所有 qml 文件都在 qml.qrc 资源文件中。
每个Page 的定义如下:
// 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。单击按钮后没有任何反应。
来自http://doc.qt.io/qt-5/qml-qtqml-connections.html#details
更一般地说,Connections 对象可以是某个对象的子对象 除了信号的发送者:
正确的做法是什么?
感谢您的帮助。
【问题讨论】: