【问题标题】:QML ApplicationWindow: set minimum size to fit contentQML ApplicationWindow:设置最小尺寸以适应内容
【发布时间】:2017-07-12 20:04:55
【问题描述】:

我想设置我的 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
    }
}

结果如下:

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

那么问题来了:如何设置ApplicationWindow的大小,使内容项(由width/heightimplicitWidth/implicitHeight给出)不被裁剪?

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

【问题讨论】:

    标签: qt qml menubar


    【解决方案1】:

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

    • 对象名称
    • 菜单
    • __contentItem
    • __parentWindow
    • __isNative
    • 风格
    • __风格
    • __menuBarComponent
    • objectNameChanged
    • 菜单已更改
    • nativeChanged
    • contentItemChanged
    • 风格改变
    • __styleChanged
    • __menuBarComponentChanged

    __contentItem 似乎很有趣,它具有height - 只要它被实例化。

    所以我们可以这样定义ApplicationWindow的高度:

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

    【讨论】:

    • 完美运行。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多