BlinCT3 апреля 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
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
3

примерно так

 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
            }
        }
    }

  • 9 апреля 2021 г. 8: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
        }
    }

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
ВС

C++ - Тест 003. Условия и циклы

  • Результат:14баллов,
  • Очки рейтинга-10
ВС

C++ - Тест 003. Условия и циклы

  • Результат:14баллов,
  • Очки рейтинга-10
ИП

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:10баллов,
  • Очки рейтинга-10
Последние комментарии
A
  • Andrey
  • 28 апреля 2021 г. 1:25

Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте

после того как дам разрешение для просмотра моего емайл, вот такая ошибка: AuthForbidden at /social-auth/complete/vk-oauth2/ Your credentials aren't allowed Вот сетингс: SOC…
DV

Qt/C++ - Урок 051. QMediaPlayer - Аудио плеер на Qt

Добрый вечер. Хотел бы получить консультацию по работе с проектом на Mac OS. Открыл проект в QT и собрал его. Проблема в том, что он не воспроизводит треки и их названия зацикленно мелькают в по…
SS

Как соответствовать новым требованиям Google Play

Добрый день. Спасибо вам огромное за вашу статью! только начинаю изучать QT под Андроид 4 дня потратил на то чтобы подобрать версию QT которая наконец то скомпилирует мне на windo…
YA

PyQt5 - Урок 009. Использование QThread с применением moveToThread

Hello. Let's say I want to send some variables to "run" define. How can we do that? I modified your code, I tried something like below, but the GUI is frozen that way. I could not be able to und…
R

Распознавание изображений на Python с помощью TensorFlow и Keras

почему то вместо 50000 обрабатывает по 782 картинки кажду. эпоху
Сейчас обсуждают на форуме
M

Qt/QML/Android(navigation button) - Стандартные клавиши навигации Андроид

Здравствуйте, пытаюсь заставить работать стандартную андроид-клавишу "назад", пытался разными способоами, они приведены в закомментированном коде. В том числе использовал https://evileg.com/ru/f…
M

Как включить OpenGL в Adnroid эмуляторе QtCreator

Здравствуйте, у меня работают виртуальные машины с Android, но только в дефолтной был включен OpenGL. Потом я удалил дефолтную, создал новые, а в них OpenGL отключен. Справа на втором скриншоте …

QScrollArea dynamically add QCheckBoxes

Всё правильно. Это просто спамер, который отправился в вечный бан.

qml зажатая кнопка мыши в одной MouseArea и сигналы мыши из другой MouseArea

добрый, вы не пробовали отслеживать область видимости мышки через: _mouseArea.containsMouse и когда мышка будет в другой зоне видимости обрабатывать ее состояния?
О нас
Услуги
© EVILEG 2015-2021
Рекомендует хостинг TIMEWEB