#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
}
}
}
Это работает нормально, но у меня есть проблемы, когда сначала изменения фокусировки на объекте, у которого есть свойства, и они отображаются, а затем изменения фокусировки на объекте, у которого также есть свойства, затем ввод текста становится больше до того момента, когда фокус будет изменен на элементе без свойств и блок свойств очищается.