如何在Qt-QML中创建多屏幕应用程序

如何在Qt-QML中创建多屏幕应用程序,qt,user-interface,qml,Qt,User Interface,Qml,非常简单的问题 这是关于Qt 4.8.5、QML、QtQuick 1.1的 我无法理解QML中的屏幕转换是如何发生的,以及如何编写代码 为简单起见,我在3个不同的QML文件中有3个不同的屏幕。 1.Home Screen 2.Setting Screen 3.Help Screen all with width: 640 and height:480 每个屏幕中有不同的子屏幕和不同的子屏幕 现在我有一个按钮在主屏幕去设置屏幕有一个返回按钮回来。然后在1和2中都有一个显示帮助屏幕的帮助按钮 现在

非常简单的问题

这是关于Qt 4.8.5、QML、QtQuick 1.1的

我无法理解QML中的屏幕转换是如何发生的,以及如何编写代码

为简单起见,我在3个不同的QML文件中有3个不同的屏幕。

1.Home Screen
2.Setting Screen
3.Help Screen
all with width: 640 and height:480
每个屏幕中有不同的子屏幕和不同的子屏幕

现在我有一个按钮在主屏幕去设置屏幕有一个返回按钮回来。然后在1和2中都有一个显示帮助屏幕的帮助按钮

现在我的main.qml文件应该是什么样子?

为简单起见,屏幕仅具有导航按钮。

有人能给我发个代码吗?你可以使用元素。它用于动态加载可视QML组件。它可以加载QML文件(使用source属性)或组件对象(使用sourceComponent属性)

例如:

Item {
    width: 200; height: 200
    Loader { 
        id: pageLoader
        source = "Page1.qml"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: pageLoader.source = "Page2.qml"
    }
}

如果您确信您的应用程序将固定在这3个屏幕上,那么您可以通过以下简单的方式逃脱:

Rectangle {
  id: app
  anchors.fill: parent
  Row {
    anchors.centerIn: parent
    Button {
      text: "settings"
      onClicked: set.visible = true
    }
    Button {
      text: "help"
      onClicked: help.visible = true
    }
  }
}
Rectangle {
  id: set
  anchors.fill: parent
  color: "red"
  visible: false
  Button {
    anchors.centerIn: parent
    text: "close"
    onClicked: set.visible = false
  }
}
Rectangle {
  id: help
  anchors.fill: parent
  color: "blue"
  visible: false
  Button {
    anchors.centerIn: parent
    text: "close"
    onClicked: help.visible = false
  }
}
你有所有3个“屏幕”在一个序列中,因此应用程序屏幕在底部,设置和帮助在顶部。然后,您可以通过简单地控制可见性来切换屏幕

如果您想要一个更具动态性的解决方案,请按照我的注释中的提示实现一个简单的堆栈视图,这非常容易,并且将是学习QML的一个很好的练习


你肯定不想效仿康斯坦丁·t的例子,为什么这样一个有缺陷的例子在第一时间就被否决了,这是一个谜。这种方法会在每次打开设置或帮助时破坏你的应用程序屏幕,返回时你不会返回到以前的屏幕,而是返回到它的一个全新实例,丢失所有以前的输入。此外,在上面放一个鼠标区域可以保证你不能与屏幕上的任何元素交互。

如果你不懂如何编码,你应该先阅读Qt的文档。您需要学习正在使用的工具包,而不是要求为您编写代码。如果你已经有了,那么发布你的(最小的)代码并说明具体的问题是什么。我刚刚开始学习。但是文档非常模糊。是的,他们有很好的细节。但像这样的细节很难找到。我只想知道做一些基本的事情而不是高级的。。谢谢请建议是否有可用的教程。文档实际上很丰富,特别是对于新手的需要。滚动您自己的堆栈视图元素很简单。但是你必须首先学习语言基础,匆忙学习并不是最好的学习方法。你真正需要的是一个常规的
,关于如何动态创建对象的知识,以及如何将它们放入JS数组中,以便您可以跟踪和管理它们的可见性和生存期。您可以检查这个问题吗。加载程序是一项繁重的任务,在QtQuick 1.1中是否有堆栈视图?如果没有,我该如何继续?@Dannysam Qt 4.8中没有StackView,它只包含在Qt 5.7中。您可以尝试使用
加载程序::sourceComponent
从加载程序加载屏幕,我不确定,但它可以更快。这不会很好地工作。这将在加载新屏幕时破坏上一个屏幕,这不是堆栈视图的工作方式。返回上一个屏幕时,您将意识到所有更改都已被销毁,因为它不是打开子视图之前使用的视图,而是一个全新的空视图。ddriver right。这不是最好的解决办法。但在某些情况下,它可以足够好。“在某些情况下,它可以足够好”——在这个问题上不是这样。另外,鼠标区域会挡住下面的所有东西,不可能与加载的元素交互。还有一个问题。如果所有屏幕都在单独的文件中。然后使用C++代码控制它们将很容易调试或使用QML?@ Dannysam不应该真的控制C++中的QML对象,尽管它可能是一种反模式。专业的方法是使用C++作为核心逻辑和GUI的QML。然后,您可以从QML连接要使用的公共核心逻辑API。GUI应该访问核心逻辑,但不能反过来访问。如果屏幕很大或者您打算重用它们,建议将屏幕放在不同的文件中,并且将它们放在单独的文件中可以将它们用作封装组件。