【问题标题】:QML Navigate through Stackview; Signal slot possible?QML 通过 Stackview 导航;信号槽可以吗?
【发布时间】:2019-12-02 15:08:24
【问题描述】:

我想构建一个简单的应用程序,我可以在其中通过 Signal Slot 切换表单(或页面)。我将 Stackview 用于我的应用程序的框架。我无法将 ui.qml(或 .qml 文件)中的信号连接到 main.qml 中的插槽 main.qml:

import QtQuick.Controls 2.5
import QtQuick.VirtualKeyboard 2.4

ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480
    title: qsTr("Stack")

   StackView{
        id: stackView
        initialItem:"InitializeForm.ui.qt"
        anchors.fill: parent
    }
}

初始化.qml:

InitializeForm {
signal moveNextView(String nextView)
}

InitializeForm.ui.qml


Item {
    id: formId
    width: 400
    height: 400
    property alias initializeText: initializeText

    Text {
        id: initializeText
        x: 77
        y: 158
        width: 246
        height: 85
        text: qsTr("Initialize")
        verticalAlignment: Text.AlignVCenter
        horizontalAlignment: Text.AlignHCenter
        font.pixelSize: 22
    }
}

谁能帮帮我?

【问题讨论】:

    标签: qt qml qt5


    【解决方案1】:

    问题是您从未将初始项目连接到 stackView 的 push 方法,因此 QML 永远不知道应该发生什么事情..

    我设法解决了这个问题...查看代码中的 cmets

    --

    main.qml

    ApplicationWindow {
        id: window
        visible: true
        width: 640
        height: 480
        title: qsTr("Stack")
    
       StackView{
            id: stackView
            initialItem:"InitializeForm.ui.qt"
            anchors.fill: parent
    
            /* add this code to connect your stackView current item to the stackView */
             onCurrentItemChanged: {
                 stackView.currentItem.requestStackChange.connect(stackView.push);
             }
       }
    

    }

    --

    初始化.qml

    InitializeForm {
    
    
    }
    

    初始化表单.ui.qml

    Item {
        id: formId
        width: 400
        height: 400
        property alias initializeText: initializeText
    
        /* heres your missing piece of the puzzle */
        signal requestStackChange(var stack, var properties)
    
        Text {
            id: initializeText
            x: 77
            y: 158
            width: 246
            height: 85
            text: qsTr("Initialize")
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
            font.pixelSize: 22
        }
        Button {
              text: "Change Stack View Item"
              width: 200
              height: 200
              onClicked: {
    
                  requestStackChange("thirdMenu.qml", {});
              }
          }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您需要使用 QML Connections 来连接信号。参见示例:https://doc.qt.io/qt-5/qml-qtqml-connections.html

      【讨论】:

      • 你有一个 Little sn-p 吗?因为 QT Creator 只给我尝试返回错误...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多