仅显示 Qt Qml Drawer 的一部分

Posted

技术标签:

【中文标题】仅显示 Qt Qml Drawer 的一部分【英文标题】:Show only part of Qt Qml Drawer 【发布时间】:2021-08-27 17:28:42 【问题描述】:

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

从文档中我认为

position 属性应该适合这个:

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

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

【问题讨论】:

由于弹出窗口/抽屉通常从其内容继承其大小,是否有某些原因您希望通过抽屉定位来执行此操作,而不是切换抽屉内容的可见性/大小? 【参考方案1】:

正如我的评论中提到的,您可能希望将您的概念从里到外,让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"
    

【讨论】:

虽然这不是我想要的,但它是一个很好的解决方法谢谢!。

以上是关于仅显示 Qt Qml Drawer 的一部分的主要内容,如果未能解决你的问题,请参考以下文章

在 QML/Qt 中模糊部分背景图像

理解QML中的`markdirty()`

具有动态列数的 QML TableView

Qt Quick编程——QML的核心部分ECMAScript

Qt/QML:带有 Keys.onPressed 的 TextInput 仅接收 DEL 键而不接收其他键

Qt Quick - 如何仅通过 c++ 代码与 qml 属性交互