QML ApplicationWindow:设置最小尺寸以适合内容

时间:2017-07-12 20:04:55

标签: qt qml menubar

我想设置QML应用程序窗口的最小宽度和高度,以便内容项完全可见(不剪切)。

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
    }
}

结果如下:

enter image description here

如您所见,设置最小宽度可以正常工作。最小高度似乎与菜单栏的高度不同。问题是,添加类似menuBar.height的内容不起作用,因为此属性不存在。

所以问题是:如何设置ApplicationWindow的大小,以便内容项(由width / heightimplicitWidth / implicitHeight给出)是不是被剪掉了?

注意:实际上,内容项不是红色圆圈,而是用作游戏画布,我想动态调整大小。

1 个答案:

答案 0 :(得分:1)

与旧版QtQuick.Controls 1.x一样,唯一可以帮助自己的方法是查看(未记录的/内部)属性。对于MenuBar,这些是:

  • 对象名
  • 菜单
  • __ contentItem
  • __ parentWindow
  • __ isNative
  • __风格
  • __ menuBarComponent
  • objectNameChanged
  • menusChanged
  • nativeChanged
  • contentItemChanged
  • 覆盖styleChanged
  • __覆盖styleChanged
  • __ menuBarComponentChanged

__ contentItem 似乎很有趣,并且只要实例化它就会显示height

因此我们可以定义ApplicationWindow的高度:

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