2017-07-12 12 views
1

Je souhaite définir la largeur et la hauteur minimales de ma fenêtre d'application QML, afin que l'élément de contenu soit entièrement visible (et non écrêté).QML ApplicationWindow: définition de la taille minimale pour s'adapter au contenu

import QtQuick 2.5 
import QtQuick.Controls 1.4 

ApplicationWindow { 
    visible: true 
    width: 100 
    height: 100 

    title: "test" 

    minimumWidth: circle.width 
    minimumHeight: circle.height // + menuBar.height 

    menuBar: MenuBar { 
     Menu { 
      title: qsTr("File") 
      MenuItem { 
       text: qsTr("Exit") 
       onTriggered: Qt.quit(); 
      } 
     } 
    } 

    Rectangle { 
     id: circle 
     anchors.centerIn: parent 
     width: 200 
     height: 200 
     color: "red" 
     radius: width * 0.5 
    } 
} 

Voici le résultat:

enter image description here

Comme vous pouvez le voir, le réglage de la largeur minimale fonctionne très bien. La hauteur minimale semble être désactivée par la hauteur de la barre de menu. Le problème est que l'ajout de quelque chose comme menuBar.height ne fonctionne pas car cette propriété n'existe pas.

La question est donc: comment puis-je définir la taille de la ApplicationWindow, de sorte que l'élément de contenu (donné par width/ou heightimplicitWidth/implicitHeight) ne sera pas rogné?

Remarque: En réalité, au lieu d'un cercle rouge, l'élément de contenu sert de toile de jeu, que je voudrais redimensionner dynamiquement.

Répondre

1

Comme toujours avec l'ancien QtQuick.Controls 1.x, la seule façon de vous aider est de regarder les propriétés (non documentées/internes). Pour la MenuBar ce sont:

  • objectName
  • menus
  • __contentItem
  • __parentWindow
  • __isNative
  • de style
  • __style
  • __menuBarComponent
  • objectNameChanged
  • menusChanged
  • nativeChanged
  • contentItemChanged
  • styleChanged
  • __styleChanged
  • __menuBarComponentChanged

__contentItem semble intéressant, et il dispose d'un height - dès qu'il est instancié.

On peut donc définir la hauteur du ApplicationWindow en tant que tel:

minimumHeight: contentItem.childrenRect.height 
       + (menuBar.__contentItem ? menuBar.__contentItem.height : 0) 
+1

fonctionne parfaitement. Merci beaucoup! – enkelwor