LINUX.ORG.RU

QML: Почему нельзя обратиться к типу Window по id?

 , ,


0

1

Есть у меня вот такой пример с прямоугольником:

    Rectangle {
         id: page
         width: 640
         height: 480
         color: "lightgray"

         Text {
             text: "Hello world!"
             anchors.horizontalCenter: page.horizontalCenter
         }
     }

Здесь видно, что внутри Text происходит обращение к вышестоящему Rectangle по id page. И происходит центрирование текста относительно прямоугольника. Все работает правильно.

Теперь делаем то же самое с Window:
Window {
    id: content
    visible: true
    width: 640
    height: 480

    Text {
        text: "Hello world!"
        anchors.horizontalCenter: content.horizontalCenter
    }
}

И видим, что обращение по id content не работает. Центрирования не происходит.

А если вместо id написать parent, то центрирование работает:
Window {
    id: content
    visible: true
    width: 640
    height: 480

    Text {
        text: "Hello world!"
        anchors.horizontalCenter: parent.horizontalCenter
    }
}

То есть, по каким-то причинам для типа Window невозможно обращение через id.

Это что за ограничение такое?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от redgremlin

Вообще ТС стоит прочитать базовую документацию по QML: http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#default-properties

Теперь идём сюда: http://doc.qt.io/qt-5/qml-qtquick-window-window.html#data-prop

data : list<Object> [default]

If you assign an Item to the data list, it becomes a child of the Window's contentItem, so that it appears inside the window. The item's parent will be the window's contentItem, which is the root of the Item ownership tree within that Window.

Dendy ★★★★★
()
Ответ на: комментарий от redgremlin

Я вообще пока еще не понял структуру документации на QML, да и как QML вообще работает. Пока только понял, что классы QML вроде как являются инстантами C++-шных Qt-шных классов, но глубже понять пока не могу. Например, не могу понять как связаны свойства QML объектов и плюсовых классов, как вообще это происходит, ведь у нас JavaScript.

Информации слишком много, и понять одну строчку «The invisible root item of the scene» - это просто отметить себе что есть что-то невидимое, да и хрен с ним, тут и так черт ногу сломит.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от annulen

Да, ведь ЛОР - русскоязычный ресурс, а документация на англицком, и воспринимается с трудом.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

А ты все равно пыьайся, переводи со словарем. Если смысл каких-то фраз не понятен, лучше об этом спроси. Потом со временем научишься, это все-таки не худ. литература

annulen ★★★★★
()
Ответ на: комментарий от Xintrea

И еще: читай код, которым пользуешься. В случае с Qt это может быть нужно не так часто, документация никогда не врет в открытую, но она не всегда содержит все подробности

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

А ты все равно пыьайся, переводи со словарем. Если смысл каких-то фраз не понятен, лучше об этом спроси.

Ты что, думаешь что я документацию не читаю? Читаю, только медленно и даже со словарем половины не понимая. Дело нужно сделать вчера, а я только третий параграф в одном разделе доки разгребаю. Не даются мне иностранные языки, я и на курсы ходил, и с репетитором в Evrovision занимался - не мое это. Грамматика - это что-то запредельное, все эти правила, времена забываю как строятся. Слова кроме базовых запоминаю с трудом. Кстати, я для того MyTetra и писал, потому что с памятью у меня туго. Но и она не всегда помогает, уже несколько раз было что я ленился заглянуть свои записульки и забывал что сам уже разбирался в вопросе. Ну правда между этим «а я разобрался» и «забыл что уже разобрался» по времени годы лежат, что радует, не совсем в маразм впал.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Может стоит попробовать ноотропы?

Грамматика - это что-то запредельное, все эти правила, времена забываю как строятся. Слова кроме базовых запоминаю с трудом.

Читать документацию можно и без знания времен, а слова - это в основном термины, которые все равно придется запомнить.

Если все равно проблема, то можно сразу переходить к чтению кода вызываемой функции. В коде мало слов и все формализовано

annulen ★★★★★
()
Ответ на: комментарий от annulen

Фенотропил уже.

Ты же не начинаешь изучение большой технологии с чтения кода вызываемых функций. Тем более что QML - это не плюсы, и провалиться в код наследуемого класса не получится.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

У (практически) любого встроенного QML-объекта есть C++-класс QQuick*, например QQuickWindow. Найти его довольно легко, find src -name qquickwindow.h в модуле qtdeclarative (или даже в include/QtQuick в проинсталлированной копии). С первых строк видно, что это не QQuickItem.

annulen ★★★★★
()
Ответ на: комментарий от Xintrea

Как к обычному параметру page.contentItem

Dendy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.