只显示 Qt Qml Drawer 的一部分

Show only part of Qt Qml Drawer

我只想显示 QML 的一半 Drawer。这个想法是在抽屉的可见部分保留一些重要信息,然后让用户显示包含更多信息的完整抽屉。

根据文档,我认为

position 属性应该适合这个:

Drawer {
  modal: false
  interactive: false
  position: 0.5 // does not work
}

但是设置位置没有效果。是否可以只展示抽屉的一部分?

正如我的评论中提到的,您可能希望将您的概念彻底颠覆,让 Drawer 从其内容继承其大小,并更改内容,而不是硬编码其大小并操纵其位置。

这里有一个完整的例子来展示这个想法。抽屉包含一个包含“信息”和“额外信息”的 RowLayout - 额外信息的可见性通过交互切换,从而改变抽屉的大小,抽屉始终保持在 100% 打开位置,但会自动更改宽度。

import QtQuick 2.12
import QtQml 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

Window {
    id: root
    width: 640
    height: 480
    visible: true

    Drawer {
        id: drawer
        height: root.height
        // width automatically derived from RowLayout child's implicitWidth

        onClosed: detailed.visible = false

        RowLayout {
            height: parent.height
            spacing: 0

            Rectangle {
                id: detailed
                color: "lightcyan"
                Layout.fillHeight: true
                Layout.preferredWidth: 200
                visible: false // when not visible, this does not add to the RowLayout's implicitWidth

                Text {
                    anchors {
                        centerIn: parent
                    }
                    text: "Extra Info\n Click to close"
                }

                MouseArea {
                    anchors {
                        fill: parent
                    }

                    onClicked:  {
                        detailed.visible = false
                    }
                }
            }

            Rectangle {
                color: "lightpink"
                Layout.fillHeight: true
                Layout.preferredWidth: 200

                Text {
                    anchors {
                        centerIn: parent
                    }
                    text: "Regular Info\n Click to open extra info"
                }

                MouseArea {
                    anchors {
                        fill: parent
                    }

                    onClicked:  {
                        detailed.visible = true // toggling visibility automatically makes the Drawer wider
                    }
                }
            }
        }
    }

    MouseArea {
        id: mouse
        anchors {
            fill: parent
        }

        onClicked:  {
            drawer.open()
        }
    }

    Text {
        anchors {
            centerIn: parent
        }
        text: "Click to open drawer"
    }
}