Qt QML Помещает элемент над ящиком

0

Вопрос

Я борюсь с очень простым вопросом..

Использование QT 5.15.2:

У нас есть простое приложение с одним главным окном и 2-3 подокном (на 1 уровень ниже основного). Главное окно состоит из элемента содержимого, заголовка и некоторых элементов меню, распределенных по главному окну. До сих пор подстраницы открывались с помощью элемента ящика.

Однако ящик перекрывает заслонки и заголовок после открытия, и нам нужно повторно создать экземпляр заслонок и заголовка в ящике, чтобы он был виден. Это не очень-то приятно. Есть ли какой-либо способ определить z-уровень, на котором открывается ящик? (очевидно, установка z не работает).


Item{
  id: id_mainWindow
  z: 0
  Drawer{
    id: id_subMenu1
    anchors.fill: parent
    z: 1
    
    /* Not so nice workaround */
    Button{
      id: id_subClose
      z: 100
      onClicked{
        id_subMenu1.close()
      }
    }
  }

  /* Unfortunately, this one gets hidden once, the drawer is open */
  Button{
    id: id_subOpenClose
    z: 100
    onClicked{
      if( id_subMenu1.open ){
        id_subMenu1.close()
      } else {
        id_subMenu1.open()
      }
    }
  }

}
qml qt qt5.15
2021-11-19 07:31:58
1

Лучший ответ

0

Я бы предложил, чтобы Drawer не является подходящим компонентом для этой работы, так как технически это Popup. Возможно, вместо этого стоит проверить компонент панели вкладок.

Тем не менее, вот перепишите свой код заново, чтобы ваш Drawer открывается, не прикрывая ваш id_subOpenClose кнопка.

import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material

Rectangle {
    id: id_mainWindow
  
    anchors.fill: parent
  
    Drawer {
        id: id_subMenu1
    
        /*
        Set the Drawer's height and y position so that it does not cover your button
        */
        y: id_subOpenClose.height
        height: id_mainWindow.height - id_subOpenClose.height
        width: id_mainWindow.width

        // Do not dim background
        dim: false
        
        // Set this to zero if you want no shadow
        Material.elevation: 2
    
        edge: Qt.RightEdge
    
        Label {
            text: 'Hello World'
            anchors.centerIn: parent
        }
    }

    /* 
    This is your header button that was getting hidden
    Here it stays as if it were part of a global header and does not get hidden by
    the Drawer.
    */
    Button{
        id: id_subOpenClose
        text: id_subMenu1.visible? 'close': 'open'
        onClicked: id_subMenu1.visible? id_subMenu1.close(): id_subMenu1.open()
    }
}

Для интерактивного примера WASM выше см. Здесь.

2021-12-01 15:56:39

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................