【问题标题】:QML ignores width and height when setting anchorsQML 在设置锚点时忽略宽度和高度
【发布时间】:2017-05-12 03:58:45
【问题描述】:

我试图了解锚在 QML (Qt Quick 2.0) 中的工作原理。我有一个像这样的简单项目:

AddButton.qml:

Item {

    Button {
        text: "ADD"
        width: 100
        height: 50
    }

}

我像这样添加到主 QML 文件中:

ma​​in.qml:

Item {
    id: root
    width: 800
    height: 600

    AddButton {
        id: addButton
    }

}

这很好用。但是,一旦我尝试使用锚点将按钮放在右下角,按钮就会消失:

ma​​in.qml:

Item {

    .....

    AddButton {
        id: addButton
        anchors.right: parent.right
        anchors.bottom: parent.bottom
    }

}

只有当我在主 QML 文件级别设置宽度和高度时它才会返回:

ma​​in.qml:

Item {

    .....

    AddButton {
        id: addButton
        width: 100
        height: 50
        anchors.right: parent.right
        anchors.bottom: parent.bottom
    }

}

所以我想知道,为什么当我设置锚点时按钮会消失?有没有办法让它工作而不在主 QML 文件中设置宽度和高度(基本上是让它使用 AddButton.qml 中设置的任何大小?)

【问题讨论】:

    标签: layout qml qtquick2


    【解决方案1】:

    问题是封装Item 没有明确的width height。在这种情况下,引擎指的是“自然”宽度/高度,即implicitWidth/implicitHeight 属性。在大多数情况下,这些属性恰好为零,即使在这种特定情况下也是如此。因此,您的自定义类型的维度为零。 因此AddButton.anchors.bottom实际上位于封装Button的最顶部,进而突出封装Item

    这有两点:

    除非您想隐藏Button 的内部结构,否则您不需要将Button 与Item 封装在一起。

    如果后者是你的愿望,试试这个:

    Item {
        width: 100 //give the object a dimension!
        height: 50
    
        Button {
            text: "ADD"
            anchors.fill: parent
        }
    }
    

    现在您可以锚定它,它不会被定位到其他地方。

    【讨论】:

    • implicit- 属性总是被忽略,但它们非常重要,因此请考虑与新手讨论它们。
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多