Динамическое создание и уничтожение объекта на onctiveFocusChanged

#qt #qml #qquickitem

Вопрос:

Я пытаюсь динамично создавать элементы (Свойства какого-либо объекта) при изменении фокуса на некоторых специальных объектах, а затем при изменении фокуса на других элементах объекта следует отключить блок свойств и создать новый (если объект, на котором был фокус)

Блок свойств

Динамическое создание при фокусировке на элементе

For this purpose I used signal from main.qml onActiveFocusChanged where as argument I send Item activeFocusItem

 import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.15


 Frame {
    id: _propetries
    width: parent.width
    Layout.fillHeight: true
    Layout.margins: defaultMargin

    property Item propertyItem: null

    //! Creating function(slot) to display Propetries of object in focus
    function displayPropetries(elementName) {
        var reg = new RegExp("AgentTabButton_QMLTYPE*")
        var reg1 = new RegExp("Executor_QMLTYPE*")
        var newComponent;
        var sprite;
        if (reg.test(elementName) || reg1.test(elementName)) {
            newComponent = Qt.createComponent("PropetriesTemplate.qml");
            if (newComponent.status === Component.Ready) {
                sprite = newComponent.createObject(_layout);
                propertyItem = sprite;
            }
        }

    }

    function destroyingPropetries(elementName){
        if (propertyItem) {
            propertyItem.destroy();
        }
        displayPropetries(elementName);
    }

    Connections {
     target: _mainWindow
     onActiveFocusPropetriesElement : {
         destroyingPropetries(elementName)
     }

    }
        //! RowLayout using for future dynamic adding rows of propetries
        GridLayout {
            id: _layout
            columns: 1
            //rows: 1
            width: _propetries.width

            RowLayout {

                Label {
                    text: "Propetries"
                    font.pointSize: 12
                    Layout.margins: defaultMargin
                    }

                //! Button for closing propetries page
                ToolButton {
                    icon.source: "qrc:/resources/resources/Icons/Close_icon.png"
                    icon.height: defaultIconSize /2
                    icon.width: defaultIconSize /2
                    Layout.alignment: Qt.AlignRight
                    Layout.margins: defaultMargin

                    onClicked: {
                        _propetries.visible = false
                        }
                    }
                }
            }

}
 

That code that’s manages creating and destroying, and there is that template:

 import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.15

//! Defining template of propetries configuration
Item {

    //id: _innerItem
    z: 10
    width: parent.width

    //! Defining property for future usage
    property string titleName: "Title: "

    GridLayout {

        columns: 1
        rows: 1
        width: parent.width

        Label {
            id: _label
            text: titleName
            font.pointSize: 12
        }

        BorderedTextBox {
            id: _borderedTextBox
            Layout.alignment: Qt.AlignTop
        }
    }
}
 
 

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