QML中通过id将锚点绑定到ApplicationWindow无法工作

7

我测试了一个简单的QML(Qt SDK版本5.3.2)程序,如下所示:

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    id: appWin

    Text {
        text: qsTr("Hello World")
        anchors.bottom: parent.bottom
    }
}

我希望文本能够放置在应用程序窗口的底部,这个已经实现了。但是,如果我将anchors.bottom: parent.bottom更改为anchors.bottom: appWin.bottom(通过ID),锚点就不再起作用了,这是一个bug吗?

2个回答

7

ApplicationWindow并非最终派生自Item,因此它没有anchors属性,这就是为什么使用窗口的id不起作用的原因。那么为什么可以使用parent呢?因为在ApplicationWindow中定义的子项会成为一个名为contentItem的中间Item 子项

如果将一个项目指定给数据列表,则它会成为窗口的contentItem的子项,因此它会出现在窗口内部。该项目的父项将是窗口的contentItem,即在该窗口内部项目所有权树的根节点。... 通常不需要引用数据属性,因为它是Window的默认属性,因此所有子项都自动分配给此属性。


-2

这看起来像是一个 bug,但根据以下 文档 的描述,它可能是设计如此:

出于性能考虑,您只能将项目锚定到其兄弟和直接父级

当锚定时,我们不太清楚如何指定 direct parent。QML 翻译器可能只接受 parent 来引用父 QML 项。


这不是一个错误,并且你可以通过 id 或使用 parent 指定直接父元素。 - cmannett85

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