2

查看 KDE plasmoids 的来源,一些小部件声明marginHints属性如下

    property QtObject marginHints: QtObject {
        property int left: Math.round(units.smallSpacing / 2)
        property int top: Math.round(units.smallSpacing / 2)
        property int right: Math.round(units.smallSpacing / 2)
        property int bottom: Math.round(units.smallSpacing / 2)
    }

虽然没有从任何地方显式引用,但删除它们实际上会破坏布局。

它甚至在其他地方都有记录吗?这是如何工作的?这是某种 QML 魔法吗?

4

1 回答 1

1

看起来,QML 的范围解析比我想象的要复杂得多。不过,阅读文档(又名 RTFM)会有所帮助。

https://doc.qt.io/qt-5/qtqml-documents-scope.html

根据那篇文章:

组件范围

QML 文档中的每个 QML 组件都定义了一个逻辑范围。每个文档至少有一个根组件,但也可以有其他内联子组件。组件范围是组件内的对象 ID 和组件的根对象的属性的联合。

[...]

组件实例层次结构

在 QML 中,组件实例将它们的组件范围连接在一起以形成范围层次结构。组件实例可以直接访问其祖先的组件范围。

将范围组合在一起,它可能已被该项目的任何子组件的任何内部组件使用。

于 2020-05-08T15:00:55.317 回答