Оба Ваших подхода - костыли.
Для этого есть
Q_PROPERTY, если вкратце - наследуете Ваш класс от QObject, прописываете Q_PROPERTY, например field1, дальше в QML
Item {
id: myForm
objectName: "myForm"
property var formHandler;
TextIntput {
id: textInput1
onEditingFinished: {
formHandler.field1= textInput1.text; (textInput1 можно отбросить и написать просто text)
}
}
}
Находите через findChild "myForm", устанавливаете ему через QVariant::fromValue(myFormHandler) инстанс класса обработчика. Таким макаром при завершении редактирования текста Вы в c++ классе автоматически получаете актуальное значение. Дальше, для сохранения значений, например в базу, можете прописать в слотах какую-либо функцию, например saveForm(); и в QML по нажатию кнопки её вызывать:
formHandler.saveForm();
и уже ничего ниоткуда собирать не надо - всё будет в прописанных Q_PROPERTY.
P.S. Это лишь один из вариантов =)