【问题标题】:QML StackView push component with properties带有属性的 QML StackView 推送组件
【发布时间】:2016-07-04 20:20:35
【问题描述】:

在 QML StackView docs 中提到您可以使用以下属性推送item
stackView.push({item: someItem, properties: {fgcolor: "red", bgcolor: "blue"}})

有没有一种方法可以通过属性推送component?我的组件基本上是其他 .qml 文件的包装器,用于我的应用程序的不同视图,例如:

Component{
    id: loginComponent
    Login{}//The Login.qml file of my project
}

这就是我正在尝试的:
Main.qml

    ApplicationWindow {
    id: appWindow
    visible: true
    width: Screen.desktopAvailableWidth
    height: Screen.desktopAvailableHeight
    property alias stackv: stackv
    property alias loginComponent: loginCom
        StackView {
        id: stackv
        anchors.top: topHeader.bottom
        anchors.topMargin: 10
        anchors.bottom: parent.bottom
        width: parent.width
        focus: true
            Component {
            id: loginCom
            Login {
                anchors.fill: parent
            }
        }
    }
    }

在另一个 QML 文件中,它作为组件推送到 stackview,我正在按钮的 onClick 方法之一上尝试:

onClicked: {
            appWindow.stackv.push({item: appWindow.loginComponent})
        }

我被这个错误弹出:

QML StackView:推送:没有什么可推送的

如果我在没有 item 属性的情况下尝试这个,它会起作用。但是,无论哪种方式,我都无法推送属性。

【问题讨论】:

    标签: qt qml qtquickcontrols


    【解决方案1】:

    documentation you linked to中,第一句话说:

    推送到 StackView 上的项目可以是项目、URL、包含 URL 的字符串或组件。

    所以只需传递一个组件:

    stackView.push({item: loginComponent, properties: {/*...*/}})
    

    编辑:事实证明,在您编辑问题并添加警告输出后,您实际上是使用 Qt Quick Controls 2 中的 StackView,而不是文档链接指向的 Qt Quick Controls 1 中的 StackView。

    【讨论】:

    • 请务必阅读正确控制集的文档,因为这两个不同的主要版本存在一些细微的 API 差异。此外,为了将来参考,当您粘贴 QML 文件时,请不要遗漏导入。
    • 尴尬,感谢您指出这一点。以后我会注意的。
    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多