QML应用窗口:设置最小大小以适应内容。

4

我想设置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这样的内容不起作用,因为该属性不存在。

那么问题是:我如何设置应用程序窗口的大小,以便不剪切内容项(由width/heightimplicitWidth/implicitHeight给出)?

注意:实际上,内容项不是一个红色圆圈,而是一个游戏画布,我希望能够动态调整其大小。

1个回答

4

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

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

__contentItem 看起来非常有趣,并且具有高度 - 只要它被实例化。

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

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

2
完美运行。非常感谢! - enkelwor
这会导致属性"minimumHeight"出现绑定循环警告,至少在5.12和5.15版本上。不过,这是Controls 2.X的问题。 - Mars

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接