BlinCT
April 3, 2021, 8:55 p.m.

Работа с созданным обьектом qml через Qt.createComponent

Всем привет.
Столкнулся с необходимостью в однмо случаи создавать обьект а в другмо нет.
Делаю так:

  1. Component.onCompleted: {
  2. if(headers)
  3. {
  4. var component = Qt.createComponent("qrc:/Modules/Header.qml");
  5.  
  6. if (component.status === Component.Ready)
  7. {
  8. component.createObject(parent);
  9. }
  10. }
  11. }

Но мне в этот обьект надо передавать разные проперти. Каким путем это делать?
Так же мне надо другим обьектам передавать по id этого обьекта расположение.
Посоветуйте как это делать)
Спасибо.

2

Do you like it? Share on social networks!

4
Serj Demchenko
  • April 9, 2021, 4:43 p.m.

примерно так

  1. Item {
  2.  
  3. ...
  4.  
  5. // мои проперти
  6.  
  7. property point pointDrag
  8. property bool caught: false
  9. property var component
  10. property var sprite
  11. property int currentIndex
  12. property var dragtarget
  13. property bool isCanCreateObject: true
  14.  
  15. MouseArea {
  16. id: mouseArea
  17. anchors.fill: submain
  18. drag.target: dragtarget
  19. hoverEnabled: true
  20. pressAndHoldInterval: 300
  21. onEntered: {
  22. mouseArea.cursorShape = Qt.CrossCursor
  23. }
  24. onExited: {
  25. mouseArea.cursorShape = Qt.ArrowCursor
  26. }
  27. onPressed: {
  28. main.pointDrag = Qt.point(main.x, main.y)
  29. }
  30.  
  31. // sprite.destroy(spriteIndex)
  32. onDoubleClicked:{
  33. if(spriteIndex > 0) {
  34. objectsFrame.children[spriteIndex].destroy()
  35. spriteIndex --
  36. }
  37.  
  38. }
  39. onPressAndHold: {
  40. if(isCanCreateObject) {
  41. component = Qt.createComponent("ModemObject.qml");
  42. sprite = component.createObject(objectsFrame);
  43. spriteIndex++
  44. sprite.x = mouseX; sprite.y = mouseY;
  45. sprite.currentIndex = spriteIndex
  46. console.log("index obj "+ spriteIndex)
  47. sprite.dragtarget = sprite // доступ к проперти созданного обьекта
  48. sprite.isCanCreateObject = false
  49. sprite.z = parent.z
  50. }
  51. }
  52. }
  53.  
    BlinCT
    • April 9, 2021, 6:15 p.m.

    Добрый день.
    И как это решает мою проблему?)

    1. Item
    2. {
    3. id: root
    4.  
    5. property var model
    6. property bool headers : false
    7. property string objectName
    8.  
    9. property int iMaxWidthRow: 0
    10. property int iTempWidthRow: 0
    11.  
    12. Component.onCompleted: {
    13. if(headers)
    14. {
    15. // var component = Qt.createComponent("qrc:/Modules/Header.qml");
    16.  
    17. // if (component.status === Component.Ready)
    18. // {
    19. // component.createObject(parent);
    20. // }
    21.  
    22. Header.model = model
    23. }
    24.  
    25.  
    26. }
    27.  
    28. Rectangle
    29. {
    30. id: header
    31.  
    32. anchors.top: parent.top
    33. anchors.left: parent.left
    34. anchors.right: parent.right
    35. height: visible ? 35 : 0
    36. visible: root.headers
    37. enabled: !root.headers
    38.  
    39. color: "transparent"
    40.  
    41. Row
    42. {
    43. id: rowHeader
    44.  
    45. anchors.top: parent.top
    46. anchors.left: parent.left
    47. anchors.right: parent.right
    48.  
    49. Repeater
    50. {
    51. id: headerRepeater
    52.  
    53. // model: root.model.headerModel
    54.  
    55. Rectangle
    56. {
    57. id: rectHeader
    58.  
    59. color: "transparent"
    60. width: root.model.getSizeLongString(model.index)
    61. height: 22
    62. anchors.verticalCenter: parent.verticalCenter
    63.  
    64. Text
    65. {
    66. width: 50
    67. height: 35
    68.  
    69. anchors.fill: parent
    70. anchors.leftMargin: 10
    71. anchors.rightMargin: 10
    72. font.pixelSize: 12
    73. verticalAlignment: Text.AlignVCenter
    74. color: "#EAEAEA"
    75.  
    76. text: root.model.headerData(modelData, Qt.Horizontal, "display")
    77. }
    78. }
    79. }
    80. }
    81.  
    82. Rectangle
    83. {
    84. id: borderine
    85.  
    86. anchors.top: rowHeader.bottom
    87. anchors.left: parent.left
    88. anchors.right: parent.right
    89. // anchors.bottom: parent.bottom
    90.  
    91. height: header.height * 0.1
    92. // color: "#2C3033"
    93. color: "red"
    94. }
    95. }

    Проблема которую я пытаюсь решить выше. Отьект id: header это тот обьект который я думаю создавать динамически. То есть еали прилетает проперти headers то он создается. Ему я передаю другие проперти. Проблема в том что этот обьект имеет такую строку

    1. model: root.model.headerModel

    и для одних моделей такая переменная есть а для других нету. И я решил что весь обьект лучше создавать.
    Других вариантов решения проблемы я не нашел.
    Попытался через такой способ сделать

    1. onHeadersChanged: {
    2. if(headers)
    3. {
    4. headerRepeater.model = root.model.headerModel
    5. }
    6. }

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

      Serj Demchenko
      • April 12, 2021, 9:48 p.m.

      Попробуйте через Connections сделать.

        U
        • May 11, 2021, 5:56 p.m.
        • (edited)

        Вот так должно прокатить:
        component.createObject(parent, {"objectName": "VotEtoYaSozdal!!!"; "iMaxWidthRow": 100});

        Жаль правда, что месяц прошел с даты вопроса)

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • AK
            April 1, 2025, 11:41 a.m.
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          • Evgenii Legotckoi
            Oct. 31, 2024, 11:37 p.m.
            Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup