qml - ссылка top. <property>не работает из ListView? - PullRequest
0 голосов
/ 28 апреля 2020

Может кто-нибудь сказать мне, почему следующее не удается? Прямоугольники указывают border.width: top.bw, где bw - это свойство в верхнем окне, которое имеет id:top. Но результат будет ноль .

Если я заменим top.bw просто bw, это будет работать в этой демонстрации, но не в реальном приложении, для которого bw может быть определено в промежуточный объект. Поэтому мне нужно как-то указать top.bw.

Что с этим связано?

import QtQuick 2.14
import QtQuick.Window 2.14

Window {
  id: top
  width:800; height: 800
  property double bw: 15

  ListView {
    anchors.fill:parent
    model: 3
    delegate: Rectangle {
      width: 100; height: 100
      border.width: top.bw
    }
  }
}

1 Ответ

0 голосов
/ 28 апреля 2020

Чтобы понять проблему, вы должны добавить следующее:

Component.onCompleted: console.log(top)

И вы получите следующее:

qml: QVariant(QQuickAnchorLine, )

Таким образом, кажется, что "top" является недокументированным свойством в Item (Это свойство предназначено для использования якорей, для получения дополнительной информации читайте Позиционирование с помощью якорей ), что приводит к конфликту имен переменных. Решением является использование другого идентификатора, например "root".

import QtQuick 2.14
import QtQuick.Window 2.14

Window {
    id: <b>root</b>
    width:800; height: 800
    property double bw: 15

    ListView {
        anchors.fill:parent
        model: 3
        delegate: Rectangle {
            width: 100; height: 100
            border.width: <b>root</b>.bw
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...