BlinCT
BlinCT3. April 2021 10:55

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

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

Component.onCompleted: {
        if(headers)
        {
            var component = Qt.createComponent("qrc:/Modules/Header.qml");

            if (component.status === Component.Ready)
            {
                component.createObject(parent);
            }
        }
    }

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

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

4
Serj Demchenko
  • 9. April 2021 06:43

примерно так

 Item {

 ...

 // мои проперти

 property point pointDrag
    property bool caught: false
    property var component
    property var sprite
    property int currentIndex
    property var dragtarget
    property bool isCanCreateObject: true

    MouseArea {
        id: mouseArea
        anchors.fill: submain
        drag.target: dragtarget
        hoverEnabled: true
        pressAndHoldInterval: 300
        onEntered: {
            mouseArea.cursorShape = Qt.CrossCursor
        }
        onExited: {
            mouseArea.cursorShape = Qt.ArrowCursor
        }
        onPressed: {
            main.pointDrag = Qt.point(main.x, main.y)
        }

        // sprite.destroy(spriteIndex)
        onDoubleClicked:{
            if(spriteIndex > 0) {
                objectsFrame.children[spriteIndex].destroy()
                spriteIndex --
            }

        }
        onPressAndHold: {
            if(isCanCreateObject) {
                component = Qt.createComponent("ModemObject.qml");
                sprite = component.createObject(objectsFrame);
                spriteIndex++
                sprite.x = mouseX; sprite.y = mouseY;
                sprite.currentIndex = spriteIndex
                console.log("index obj "+ spriteIndex)
                sprite.dragtarget = sprite  // доступ к проперти созданного обьекта
                sprite.isCanCreateObject = false
                sprite.z = parent.z
            }
        }
    }

    BlinCT
    • 9. April 2021 08:15

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

    Item
    {
        id: root
    
        property var  model
        property bool headers : false
        property string objectName
    
        property int iMaxWidthRow: 0
        property int iTempWidthRow: 0
    
        Component.onCompleted: {
            if(headers)
            {
    //            var component = Qt.createComponent("qrc:/Modules/Header.qml");
    
    //            if (component.status === Component.Ready)
    //            {
    //                component.createObject(parent);
    //            }
    
                Header.model = model
            }
    
    
        }
    
        Rectangle
        {
            id: header
    
            anchors.top: parent.top
            anchors.left: parent.left
            anchors.right: parent.right
            height: visible ? 35 : 0
            visible: root.headers
            enabled: !root.headers
    
            color: "transparent"
    
            Row
            {
                id: rowHeader
    
                anchors.top: parent.top
                anchors.left: parent.left
                anchors.right: parent.right
    
                Repeater
                {
                    id: headerRepeater
    
    //                model: root.model.headerModel 
    
                    Rectangle
                    {
                        id: rectHeader
    
                        color: "transparent"
                        width: root.model.getSizeLongString(model.index)
                        height: 22
                        anchors.verticalCenter: parent.verticalCenter
    
                        Text
                        {
                            width: 50
                            height: 35
    
                            anchors.fill: parent
                            anchors.leftMargin: 10
                            anchors.rightMargin: 10
                            font.pixelSize: 12
                            verticalAlignment: Text.AlignVCenter
                            color: "#EAEAEA"
    
                            text: root.model.headerData(modelData, Qt.Horizontal, "display")
                        }
                    }
                }
            }
    
            Rectangle
            {
                id: borderine
    
                anchors.top: rowHeader.bottom
                anchors.left: parent.left
                anchors.right: parent.right
    //            anchors.bottom: parent.bottom
    
                height: header.height * 0.1
    //            color: "#2C3033"
                color: "red"
            }
        }
    

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

    model: root.model.headerModel
    

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

        onHeadersChanged: {
            if(headers)
            {
                headerRepeater.model = root.model.headerModel
            }
        }
    

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

      Serj Demchenko
      • 12. April 2021 11:48

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

        U
        • 11. Mai 2021 07:56
        • (bearbeitet)

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

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

          Kommentare

          Nur autorisierte Benutzer können Kommentare posten.
          Bitte Anmelden oder Registrieren
          Letzte Kommentare
          A
          ALO1ZE19. Oktober 2024 08:19
          Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь Максимов5. Oktober 2024 07:51
          Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
          d
          dblas55. Juli 2024 11:02
          QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
          k
          kmssr8. Februar 2024 18:43
          Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
          Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
          Jetzt im Forum diskutieren
          J
          JacobFib17. Oktober 2024 03:27
          добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
          JW
          Jhon Wick1. Oktober 2024 15:52
          Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
          КГ
          Кирилл Гусарев27. September 2024 09:09
          Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
          F
          Fynjy22. Juli 2024 04:15
          при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

          Folgen Sie uns in sozialen Netzwerken