Russian Qt Forum

Qt => Qt Quick => Тема начата: juvf от Январь 16, 2023, 10:02



Название: Доступ до дочерних элементов
Отправлено: juvf от Январь 16, 2023, 10:02
Как поменять свойства дочерних элементов?

есть свой элемент MyButton.qml

Код:
Rectangle{
    id: myButton
    width: 93
    height: 93
    color: "transparent"

    Button{
        id: butPage
        anchors.fill: parent
        onClicked: {
            updateFocusAudio(myButton);
            }

        Text {
            id: temeratureText
            text:  "12"
        }
}

допустим я добавляю куда-нибудь эту свою кнопку и хочу поменять текст и/или колбэк по нажатию. как это сделать? Попробовал так


Цитировать
Item:{
     id: mainForm
     MyButton{
           butPage.onClicked: updateFocusAudio(myButton)
           temeratureText.text: "13"
     }
}
ошибка компиляции. butPage и temeratureText - invalid property name. как это правильно сделать?


Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 16, 2023, 10:17
надо добавить нужные property [alias] в свой элемент, это подробно описано в документации


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 16, 2023, 11:20
1) текст можно через property поменять. А как поменять вызываемую функцию через property? Какой должен быть тип?
2) я для упрощения сделал маленький myButton. На самом деле в нем много всяких вложенных объектов, в которые вложены другие... мне не очень нравиться выносить всё, что требуется менять, выносить 100500 property. Есть способ добраться до дочерних элементов без property ?


Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 17, 2023, 12:55
1) тип var наверное
2) добраться напрямую нельзя — только через новые свойства (обычные или алиас) или функции


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 18, 2023, 07:14
Хорошо..... вот сделал свою кнопку. Со свистелками... рюшечки обои... тени/подсветка/эффекты.... обрамил её ректом

Код:
Rectangle{
    id: myButton
    property bool activePage: false
    property string textButton: ""
    property string imageSource: ""

    Button{
        id: but
        anchors.fill: parent
        highlighted: activePage
        clip: true
        onClicked: {
            callback(); //как вынести этот callback в свойства
            // Запускаем анимацию
            colorRect.x = pressX
            colorRect.y = pressY
            circleAnimation.start()
            colorAnim.start()
            }
      }
}

получился довольно тяжелый корневой Rectangle, поэтому вынес его в отдельный *.qml фаил. Там, где надо использовать - объявляю экземпляр кнопки и задаю ей через свойства картинку, текст, цвет....
но в разных местах в разных экземплярах этой кнопки мне нужно при нажатии разные действия на нажатие. Как теперь экземплярам этой кнопки указывать разные callback-и?


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 18, 2023, 07:16
надо добавить нужные property [alias] в свой элемент, это подробно описано в документации
где подробно описано в документации как вынести callback в property?  Можете в моем коде добавить этот проперти? какой синтаксис?


Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 18, 2023, 12:43
вот простейший пример:

Код:
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")

B {
callback: () => console.log("hello")
}

component B: Item {
property var callback

Button {
onClicked: callback()
text: "test"
}
}
}

кстати activePage у тебя можно сделать просто как алиас на but.highlighted


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 18, 2023, 13:01
вот простейший пример:

Да, с холовордом заработало. спасибо. Я же говорю, с синтаксисом не понятно. А как это сделать с функцией, в которую передаются аргументы?

кстати activePage у тебя можно сделать просто как алиас на but.highlighted
так я его вынес в проперти, т.к. нужно его менять but.highlighted снаружи, т.е. снаружи нужно получить доступ до дочерних эл-ов.


Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 18, 2023, 13:48
не знаю что там непонятно. переменная типа var (любой жс объект), присваиваем ей жс функцию. почитай как в жс пишутся функции. в кумл с жс придется сталкиваться нередко, поэтому желательно основы языка все-таки изучить.

так я и говорю, что можно сделать property alias, чтоб устранить ненужное отдельное свойство, чья задача лишь передать значение дочернему элементу. https://doc.qt.io/qt-6/qtqml-syntax-objectattributes.html#property-aliases


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 18, 2023, 14:10
не знаю что там непонятно.

не понятно вот это - вот функция js в qml

    function updateFocus(obj)
    {
        butPage1.activePage = false;
        switch(obj)
        {
    ...
        }
    }

теперь я её вызываю по нажатию кнопки
      Button {
                        id: asd
         onClicked: updateFocus(asd)
         text: "test"
      }

Тут всё понятно. Теперь я захотел по onClicked вызвать функцию через проперти.

я сделал так
Item {
          property var nameMacros: updateFocus
      Button {
                        id: asd
         onClicked: nameMacros(asd)
         text: "test"
      }
} - не заработало. Я делал так

Item {
          property var nameMacros: updateFocus(obj)
      Button {
                        id: asd
         onClicked: nameMacros(asd)
         text: "test"
      }
} - не заработало

вот так делаются проперти в qml:
property int name: 123
акказываицо с функциями другой синтаксис
property var name - т.е. ключевое слово property, затем тип var, затем имя свойства. двоеточия не нужно. Где-то есть в мануалах/примерах как в качестве проперти делать функцию?
Далее....

смотрю Ваш пример

callback: () => console.log("hello") - НИФИГАСЕБЕ как надо было!!! Т.е. имя проперти, двоеточие, скобочки, симовл => и затем команду!!! И в теле кнопки вызывать не "callback", а "callback()".

Вообще всё не понятно. Как в js или/и в qml сделать указатель на функцию без аргументов? Как сделать указатель на функцию с аргументами? как вызывать функцию через указатель? Как сделать указатель на функцию с аргументами, которая возвращает значение?


Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 18, 2023, 15:31
> двоеточия не нужно
оно опционально, как и в случае с другими свойствами. можно, например, задать начальное значение null.

> Где-то есть в мануалах/примерах как в качестве проперти делать функцию?
в документации вроде не попадалось, я пользовался здравым смыслом при написании примера

> НИФИГАСЕБЕ как надо было!!!
ну, понятно, что если ты никогда не видел как пишутся жс функции, ты б не догадался :) есть и другая форма записи — через ключевое слово function.

> И в теле кнопки вызывать не "callback", а "callback()"
а вызов функции как-то по-другому делается в С-подобных языках? :) посмотри, например, на лямбды в С++.

> Как в js или/и в qml сделать указатель на функцию...
как без аргументов и как вызывать я уже показал. аргументы пишутся внутри () просто именами, типы необязательно указывать (не помню в какой версии Qt ввели возможность писать типы). тип возвращаемого значения можно не указывать, просто пишешь return ... в нужных местах. если функция состоит из более, чем одного выражения, надо использовать фигурные скобки: => { ... }

в общем, плотненько почитай QML документацию, особенно по части взаимодействия с жс, а также ознакомься с основами жс.


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 19, 2023, 07:07
в общем, плотненько почитай QML документацию, особенно по части взаимодействия с жс, а также ознакомься с основами жс.
Да вы что!? Реально, если почитать документацию - то вопросов не будет? Ooooo .... оказывается  есть документация по QML! СПАСИБО ЗА ПОДСКАЗКУ.

это совет из серии - "сам разбирайся, я тебе не буду помогать".

меня умиляют такие советы. зачем их дают? Вы думаете я не читал документацию по QML и по js? Если бы после прочтения документации ни у кого ни когда не возникало вопросов, то тогда и этот форум не нужен. На любой вопрос по любому языку можно ответить "почитай C++/C/QML/QtC/.... документацию".

если кто-то напишит код на СИ с обращением к функции через указатель, ошибется, выложит этот кусок и спросит - "сделал так, не работает. как нужно?", то я поправлю его код без отсылки к RM.

Вы знаете что я делаю не так? Вам поправить мой код - это 1-2 сточки. ВСЁ!!! Зачем столько много слов/постов писать и отсылать к документации?


Цитировать
> Как в js или/и в qml сделать указатель на функцию...
как без аргументов и как вызывать я уже показал.
Я не увидел.


может вот это? callback: () => console.log("hello"), но я не увидел, что вы здесь объявили указатель на функцию. потому-что нет ни каких комментариев и пояснений. У меня функция - несколько комнад. Тут за callback одна команда, нет тела функции. Что это? может что-то типа аля макрос в си?

Цитировать
есть и другая форма записи — через ключевое слово function
я через function определяю все функции в qml. ничего общего с вашим "callback: ()" я не увидел.

ps... по поводу "я уже показал"... что вы показали? вот это
Код:
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")

B {
callback: () => console.log("hello")
}

component B: Item {
property var callback

Button {
onClicked: callback()
text: "test"
}
}
}
Что это такое? например вот это
Цитировать
   B {
      callback: () => console.log("hello")
   }
что такое B? (вопрос риторический) объявление нового компонента? Я не гуру в qml, часто обращаюсь к мануалам, часто изучаю чужой код, чужие примеры, смотрю/читаю уроки... я не разу не видел такой записи.

Далее... вот эта сточка
Код:
component B: Item {
Что такое Item - я знаю. Но что такое component - нет. Гугл асистент в помощь. Открываю QtC->асистент, вбиваю "component", он находит в qml ТОЛЬКО в SceneLoader метод component. Но в приведённом вашем коде нет ни каких SceneLoader. Так что эта строчка обозначает? (это тоже вопрос риторический).


Я это всё к тому, что я qml и js изучаю в бою. по большому мне они не нужны, т.е. я не собираюсь быть профессиональным программистом в qml или js. Мне они нужны по стольку по скольку. мне бы через указатель вызвать функцию по нажатию кнопки и все, и поехал дальше... задач основных - завал. Да... со временем, если буду часто в qml конечно руку набью... но сейчас разбираться что такое "component B"???

pps за алиасы ещё раз спасибо. рука набивается.




Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 19, 2023, 12:32
> СПАСИБО ЗА ПОДСКАЗКУ.
ну вот алиасы в документации вполне описаны, как и то, что начальное значение для свойства необязательно, а ты о них не знал, что как бы намекает :)

> Вы знаете что я делаю не так? Вам поправить мой код - это 1-2 сточки. ВСЁ!!! Зачем столько много слов/постов писать и отсылать к документации?
подход «сделайте за меня» еще никого ничему толком не научил

> Я не увидел.
я уже несколько раз написал: изучай жс, почитай как там определять анонимные функции (кажется я слово «анонимные» забыл до этого сказать) / замыкания / лямбды. в моем примере как раз используется анонимная функция без аргументов. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

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

ключевое слово component было добавлено в 5.15 кажется, позволяет описывать новые компоненты в текущем файле, без необходимости выносить их в отдельный.
Код:
component B: Item { ... }
эквивалентно
Код:
// B.qml
Item { ... }

> Я это всё к тому, что я qml и js изучаю в бою. по большому мне они не нужны, т.е. я не собираюсь быть профессиональным программистом в qml или js
так я тоже, вот только документацию QML очень плотно читал, чтобы понять что там вообще есть, какие подходы можно использовать и т.д. чтоб делать по-человечески. для хеллоуворлд всю читать, конечно, не надо :)


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 19, 2023, 13:45
что как бы намекает :)
немекает на что? что я плохо знаю qml? Я прямо говорю - я плохо знаю qml, и что? Я не могу обратиться сюда за помощью?

Цитировать
подход «сделайте за меня» еще никого ничему толком не научил
не путайте подход «сделайте за меня» с подходом «покажите как правильно». Я вам не ставил задачу и чтоб вы за меня её сделали. я показал как я попытался решить эту задачу и спросил - что я сделал не так? Поправьте, покажите как нужно? Показать на примере как нужно сделать - это практической обучение, которое обучает не хуже теории. 

вместо того, чтобы в моём коде исправить 1-2 строчки - вы написали свой код, в 16 строк (не лень же было). т.е. один раз ударить топором по моему qt5.12 бревну - это для вас "я за вас делать не буду", а построить рядом свой дом из qt5.15 кирпича как пример - вам на это не жалко вермени.

Цитировать
начальное значение для свойства необязательно, а ты о них не знал,
да.... не знал... повешаться теперь?.... рассказать вам как проходит самообучение языку программирования? Правильно, по самоучителю. А если его нет, то по урокам, примерам.... Нужно было отрисовать в qml - открыл уроки... ага - есть Item, есть Text, есть синтаксис... всё понятно. В уроке показали как задавать проперти
property int name: 123   - выучил.

Открываю асистент - вбиваю туда "property" - нет там этих property не находит ассистант эти ваши дикпики проперти.

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

Цитировать
ключевое слово component было добавлено в 5.15
у меня 5.12.

Цитировать
так я тоже, вот только документацию QML очень плотно читал, чтобы понять что там вообще есть, какие подходы можно использовать и т.д. чтоб делать по-человечески. для хеллоуворлд всю читать, конечно, не надо
я не хочу быть проф. прогарммистом qml и божеупаси js. жысть заставила заглянуть в qml...

будьте толлерантны к тем, кто обращается за помощью.


ps
Цитировать
в моем примере как раз используется анонимная функция без аргументов. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
oooooo.... вот скажите... вот человек, идет мимо js. Ему это js - как 5-ая нога собаке. Выучил ключевое слово function - это необходимо и достаточно для решения текущей задачи. Больше от js мне ни чего не нужно. открываю вашу ссылку и там на! на! на! по голове и вижу - в это всё надо погружаться, во всё вникать .... это надо учить и чтобы не забыть - практиковаться. Но мне это не нужно. У меня совершенно другие задачи.


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 19, 2023, 13:59
Цитировать
плотненько почитай QML документацию, особенно по части взаимодействия с жс
vs
Цитировать
в документации вроде не попадалось



Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Январь 19, 2023, 16:36
> немекает на что? что я плохо знаю qml?
на то, что ты ленишься читать документацию и/или искать ответы самостоятельно, а вместо этого первым делом бежишь на форум. ты не новичок в программировании, поэтому-то и странно видеть такой подход.

> что я сделал не так? Поправьте, покажите как нужно?
так я тебе сразу и задал нужное направление на property [alias], вот только эффекта оно не сильно-то и возымело... задача помочь необязательно заключается в написании нужного кода в точности — куда важнее направить в верное русло, чтобы человек сам додумался до решения (тут же и практическая часть), вот от этого куда больше пользы будет. может, если б ты сразу сказал, что мне надо «хуяк-хуяк и в продакшн», то обошлись бы готовым кодом.

> вместо того, чтобы в моём коде исправить 1-2 строчки - вы написали свой код, в 16 строк
твой код не является законченным приложением, которое можно сразу собрать. почему я должен тратить на это время? у меня под рукой есть хеллоуворлд проект, вот я на нем и добавил пару строк в существующий файл. ты ж не новичок, сможешь адаптировать его под свой :)

> qt5.12
и как я должен об этом узнать? вообще, не вижу смысла использовать версии ниже 15 из 5-й линейки, но может у тебя там что-то экзотическое, конечно. это еще хорошо, что я не использовал какую-нить фичу из 6-й версии :)

> рассказать вам как проходит самообучение языку программирования? Правильно, по самоучителю
я не пользуюсь самоучителями и все получается, ЧЯДНТ? если говорить про QML, я читал лишь официальную документацию и официальную книжку от Qt (https://www.qt.io/product/qt6/qml-book) (и то, книжку можно кусками читать, т.к. там еще разные модули рассматриваются), и несколько раз приходилось гуглить неочевидные вещи.

> Открываю асистент - вбиваю туда "property" - нет там этих property
я не знаю насколько полон ассистент по сравнению с сайтом, чаще всего использую его именно как контекстную подсказку по ф1. можно же и на сайте с документацией искать, не так ли? или вот так через обычный веб поисковик: <ключевые слова> site:doc.qt.io

> не знаю. а что бы поменялось? вы бы не стали меня заставлять читать доки и без комментариев поправили бы мой код?
я бы относился к тебе как к новичку, а не как к программисту со стажем с соответствующими навыками

> я не хочу быть проф. прогарммистом qml и божеупаси js. жысть заставила заглянуть в qml...
у меня тоже таких планов нет, но был очень сильный интерес к QML. жс в контексте QML — это просто С-подобный язык, это в вебе и электроне там всякие ужасы :)

> открываю вашу ссылку и там
если все-таки уделить несколько минут чтению или хотя бы просто сделать Ctrl+F по слову function, а если еще и вспомнить, что я говорил об альтернативной форме записи... можно такое обнаружить!

> vs
открою секрет: я тоже не знал как сделать свойство коллбэка, но я воспользоваться здравым смыслом и у меня все получилось.

могу рассказать как можно до этого дойти самостоятельно из твоего положения за минуты, не тратя 3 дня на форум:
- пишем в гугл js callback (ну или то же самое на русском)
- или вот ты новичок в QML. все, что ты знаешь — что там можно писать жс код, даже если толком в жс не умеешь. тебе хочется понять какой же тип задать свойству коллбэка. для начала надо понять какие существуют типы в QML, для этого придется открыть документацию (https://doc.qt.io/qt-5/qtqml-typesystem-basictypes.html) (наверняка эта страница и в ассистенте есть). читаем какие есть типы: ага, кроме var ничего не подходит, переходим по его ссылке, и... о боги! там даже есть пример как функцию в свойство засунуть!

но, очевидно, намного лучше, чтоб все сделали за тебя :)


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Январь 20, 2023, 08:13
> немекает на что? что я плохо знаю qml?
ты ленишься читать документацию и/или искать ответы самостоятельно, а вместо этого первым делом бежишь на форум.
ну еще один экстрасенс. от куда ты знаешь что я сделал первым делом? свечку держал? да обращаться на форум - это вообще самое последнее дело, тем более где такое хамло как ты.

Цитировать
> что я сделал не так? Поправьте, покажите как нужно?
так я тебе сразу и задал нужное направление на property [alias], вот только эффекта оно не сильно-то и возымело...
во первых про алиас я поблагодарил. во вторых "покажите как нужно?" - это было про функции. см мой первый пост - "как это правильно сделать?". Как правильно сделать пропертями функцию? Где ты мне дал направление? Отправил читать документацию и следующим постом написал - "этого в документации нет". Это твоё направление? или написал свой непонятный код и заставил учить js?

Цитировать
может, если б ты сразу сказал, что мне надо «хуяк-хуяк и в продакшн», то обошлись бы готовым кодом.
я сразу сказал - "Как это правильно сделать?". был бы готовый код - я бы сам решил - если мне в дальнейшем это надо, я бы поискал доки на этот код или тут бы спросил. если не нужно - копипаст и забыл.

Цитировать
ты ж не новичок, сможешь адаптировать его под свой
ты представляешь, не смог. вот так смог
Код:
Rectangle{
    id: myButton
    width: 93
    height: 93
    color: "transparent"

    Button{
        id: butPage
        anchors.fill: parent
        onClicked: {
            callback()
            }

        Text {
            id: temeratureText
            text:  "12"
        }
}

Цитировать
Item:{
     id: mainForm
     MyButton{
           callback: () => console.log("hello")
     }
}
но мне нужно не одну строчку console.log("hello"), а отдельную функцию и множества строк.
и согласись, идти на курсы js ради одной строчки кода....

Цитировать
и как я должен об этом узнать?
ни как. есть исходый код. он в 12. его поправить и всё.
ps постаивл 5.15 открываю ассистент, вбиваю в поиск "component" - нет в справки этого ключевого слова.

Цитировать
не вижу смысла использовать версии ниже 15 из 5-й линейки
Да, но только мир многогранный, и не ограничевается твоим настольным ПК. Пишу приложение для linux embeded, из коробки был Qt5.6 по мойму, но там нехватало каких-то библиотек от Qt. Пришлось кросскомпилировать новый linux , новый тулчейн, новый Qt. На тот момент последний был Qt5.12. Более того, собираю линукс билрутом. есть на авроре для моей платформы патченые исходники под мою платформу. Там ядро лиукса 5.10.9. В нем Qt5 не самый свежий. Если брать 5.15 или 6-ку, то это надо своё все собирать. а 6-ка может потащить более свежий glibc, libtext... и пошло поехало. Нужно будет и линукс собирать более свежий. Качать с kernel.org и делать адаптировать его под мою платформу. Не вижу в этом смысла. 5.12 меня удевлетворяет более чем, и так же linux5.10. Сросишь - "как я должен об этом узнать?", отвечу - никак. Зачем тебе это знать? мне нужно было это всё в первом посте написать, начав с того как я закончил школу и дожил до программирования в Qt?

ps а ещё есть такая ос как debian, у которой стабильная ветка отстаёт от текущего времени на 1-2 года. Не удивлюсь, что там по дефолту Qt5.6. Я уже молчу про ос, которые собраны для эмбедед для старого железа и там версии куда старше.


 
Цитировать
я не пользуюсь самоучителями .... я читал лишь официальную документацию и официальную книжку от Qt
Это не документация, а самоучитель. Документация - это ассистент.

Цитировать
можно же и на сайте с документацией искать, не так ли?
не люблю искать на сайте qt что-то, но тем не менее иногда ищю. сайт qt - я бы назвал говносайт. очень они его испортили. заходишь doc.qt.io - выбирай 5 или 6. Выбрал 5 - получи 5.15. Мне нужно 12. А 12 надо сходить в приют для собак, взять пару исщеек и искать собаками. В отличии например от boost.org - там всегда можно в пару кликов получить документацию на любую версию. а на qt... даже скачать... слышал от многих программистов
"-Теперь старую версию Qt нельза скачать с оф сайта. "
Но есть  сайт download.qt.io. Как с сайта qt.io попасть на download.qt.io? хз

Цитировать
или вот так через обычный веб поисковик: <ключевые слова> site:doc.qt.io
а ты сам пробовал? я попробовал. вот результат (http://yaforyou.ru/?q=property%20site:doc.qt.io). Если хочешь дать совет, которым сам не пользуешься - попробуй сам сначала так поискать.

Цитировать
я бы относился к тебе как к новичку
и? ты бы не сказал Read The Fucking Manual? очень сомневаюсь. Очень часто вижу на форумах заходит новичёк, что-то спросит, элементарную вещь, ему вместо помощи накидают ссылок на книжки Страуструпа и на стандарт ISO/IEC. а если новичек посмеет ещё что-то спросить, то ему накидают полную панамку такие как ты, со словами "намного лучше, чтоб все сделали за тебя ".
 
Цитировать
или хотя бы просто сделать Ctrl+F по слову function
))))) я же говорю - прежде чем давать такие советы - ПОПРОБУЙ САМ. Я попробовал - 93 совпадения. Вся страничка, от начало до конца, засвечена словом function.

Цитировать
> vs
открою секрет: я тоже не знал как сделать свойство коллбэка, но я воспользоваться здравым смыслом и у меня все получилось.
очевидно у тебя больше знаний и опыта в qml и js. Открою секрет: этот форум (и аналогичные) существуют чтобы обмениваться опытом и обращаться сюда за помощью.

Цитировать
- пишем в гугл js callback
- попал сюда (https://learn.javascript.ru/callbacks). прочитал.... прочитал ещё раз..... и ещё... теперь - как это связать с qml? и вообще какой отношение ЭТО имеет к qml? Мне, например, в этой статье не хватает примера для qml. Был бы он там - я бы сюда не заходил. И не нужно говорить - "там всё очевидно" и "про здравый смысл". Было бы везде всем всё очевидно - не нужны были бы такие форумы, учебники, самоучители и "официальные книжки". Открыл ассистент или ISO/IEC - и все вопросы отпали.


Цитировать
или вот ты новичок в QML. все, что ты знаешь — что там можно писать жс код, даже если толком в жс не умеешь. ... ага, кроме var ничего не подходит
как ты проходишь по этому пути? Ты думаешь я не открывал типы в QML. Открывал....

bool - Binary true/false value - этот тип мне не подходит. мне нужен тип "указатель или ссылка на функцию"... смотрю следующий тип...
double - Number with a decimal point, stored in double precision - это тоже не то
.....
var - Generic property type - этот тип мне не подходит. мне нужен тип "указатель или ссылка на функцию". больше типов нет.

Если бы ты мне одну строчку в первом ответе скопипастил бы с асистанта
property var aFunction: (function() { return "one"; }) или ссылку на эту страничку - я бы с благодарностью закрыл тут же эту тему.
человек может прочитать RM и что-то пропустить, просмотреть, ошибиться, не смочь провести аналогию. Для этого и существует общение и форумы. Да даже ты мне сказал "очевидно var". Мне не очевидно. Я открываю ассистент, смотрю ещё раз все типы, нахожу var - Generic property type... да зачем мне тип Generic? Мне нужен тип "указатель на функцию". Я даже не провалился в var.


Цитировать
но, очевидно, намного лучше, чтоб все сделали за тебя
это ты так решил. моё мнение - "покажите как нужно". Но такие как ты, всё равно будут долбить про восемьлетбамбасс "все сделали за тебя".... это всё, клиника.


и вот ещё....

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

Цитата: kambala
> Где-то есть в мануалах/примерах как в качестве проперти делать функцию?
в документации вроде не попадалось
Цитата: kambala
...я ...документацию QML очень плотно читал, чтобы понять что там вообще есть, какие подходы можно использовать и т.д.

Т.е. ты такой весь гуру... читал ПЛОТНО документацию по QML и в документации тебе это не попадалось!? А оно там есть. И ты меня тут учишь плотно читать документацию, сам так делаешь и сам же не видишь, что в этой документации? это тебе ни на что как-бы не намекает?

ещё раз говорю - будьте толлерантны к тем, кто обращается за помощью.
Мне давно известно, что прочтение документации не даёт 100%-ых знаний. Даже ПЛОТНОЕ прочтение документации. Без практики, советов более опытных, без разъяснений и примеров освоение материала длительно и сложно. Надеюсь ты тоже это поймёшь (хотя бы на своем примере) и в будущем к обращению за помощью будешь относиться не как "сделай это за меня" и думать что "ты ленишься читать документацию и/или искать ответы самостоятельно, а вместо этого первым делом бежишь на форум.". И надеюсь ты поймёшь, что если человек что-то спросил тут, это не означает, что он не читал ПЛОТНО документацию и не пытался найти ответ в гугле.


Название: Re: Доступ до дочерних элементов
Отправлено: juvf от Февраль 10, 2023, 14:48
> qt5.12
и как я должен об этом узнать? вообще, не вижу смысла использовать версии ниже 15 из 5-й линейки, но может у тебя там что-то экзотическое, конечно. это еще хорошо, что я не использовал какую-нить фичу из 6-й версии :)
Собираю свою сборку Linux для своей железки в buildroot. Там галочку ставишь "Qt5" - при сборке собираются библы qt в rootfs. Выбора версии Qt нет. Собиралась всегда Qt5.12. Не самая свежая. всё, что мне нужно работает.

Далее.... пишу свой апликэшин для этой сборки - работает. По тихоньку моё приложение обрастает функционалом.... И черт меня дернул сделать git push buildroot. Обновил билрут до самого свежего. Ну и ладно, мой конфиг неизменный, в моём конфиге билрута моё ядро и мои настройки. Посвежееют некоторые библиотеки - ни чего страшного.

Посвежели. Теперь галочка в билруте "Qt5" подтягивает Qt5.15.8. Хорошо, пересобрал rootfs, запускаю свою прогу - больше моя прога не работает. выдает

Код:
ASSERT: "targetObjectIndex >= 0" in file ../../include/QtQml/5.15.8/QtQml/private/../../../../../src/qml/qml/qqmlpropertycachecreator_p.h, line 828
Aborted
Вопросы риторические: Что с этим делать? Что за qqmlpropertycachecreator_p? я в коде property cache creator ни где не использую.

 Это к вопросу о смыслах использовать не самое свежее ПО.
   


Название: Re: Доступ до дочерних элементов
Отправлено: kambala от Февраль 10, 2023, 18:52
ну тут же непонятно в чем проблема: может у тебя код кривой, и раньше в Qt на это «закрывались глаза», а теперь добавили проверку. а может и баг в Qt забрался, такое тоже возможно.

если это прямо при запуске происходит, то на всякие начальные объекты и смотреть надо, отключать их по частям чтоб определить кто виноват. еще можно на багтрекере/в гугле поискать один ты такой или нет (и открыть баг, если один).

есть еще хороший проект с бэкпортами всяких патчей на последнюю 5.15 LTS: https://community.kde.org/Qt5PatchCollection

P.S. что такое билдрут не знаю и вообще мир «железок» мне незнаком