0

我在一个 Qt 项目上工作,几乎所有的 QML 项目都在同一个文件main.qml中。该应用程序使用 StackLayout 来浏览其他 QML 文件,并且需要在其main.qml自身中呈现项目。

我使用 Loader 调用包含 GridLayout 的组件,该 GridLayout 包含标签和图像。在这个容器之外,还有其他图像和标签锚定在mainWindow.

问题是,当使用 Loader 在 StackLayout 中调用组件时,组件尺寸会覆盖 ApplicationWindow 中定义的图像。它表现为 fillHeight 所有 Window 这不是我想要的。

问题是,如何在不填充整个窗口的情况下加载组件,但在使用 StackLayout 之前保持原来的大小。

我仍然是 Qt 的初学者,因此欢迎任何其他首选的建议方法。

代码结构与此类似,

ApplicationWindow {
    id: mainWindow
    width: 500
    height: 400

    (... some code ...)

    Image{
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        anchors.bottomMargin: 22
        anchors.leftMargin: 24
        width: 80
        height: 40
        fillMode: Image.Stretch
        source: "qrc:/image.png"
    }

    StackLayout {
        id: mainStackLayout
        width: mainWindow.width
        height: mainWindow.height

        FirstPage {}  // another .qml file
        Loader {
            sourceComponent: component
        }
    }

    Component{
        id: component

    GridLayout {
        id: grid
        width: mainWindow.width
        height: mainWindow.height
        columns: 4

    Labels{}
    ...
    ...
    ...
    Labels{}
    }
4

1 回答 1

2

问题主要是您已将 StackLayout 设置为覆盖整个窗口:

        width: mainWindow.width
        height: mainWindow.height

StackLayout 将成长它的孩子以适应它的大小。

两个简单的选择:

  1. 将 Loader 放在 Item 内,这样 Item 会变大,并且加载的组件的大小不会受到影响。
  2. 在 ApplicationWindow 上放置一个布局,以便更好地管理您的 Image 和 StackLayout。

我推荐选项 2。除非您不允许用户调整窗口大小,否则您的所有 QML 组件都应该设计为可调整大小。

于 2021-04-20T13:34:28.803 回答