Я пытаюсь соединить класс C ++ с QML , но я не могу реализовать логику в отдельном файле qml. Когда я добавляю функциональность непосредственно в файл ui.qml, она работает, но я получаю предупреждение:
Функции не поддерживаются в форме Qt Quick UI
Я пробовал , используя псевдоним , но по какой-то причине он не работает. Вот код:
ReasonsForm.ui.qml:
import QtQuick 2.4
//import io.qt.UserDataProvider 1.0
MenuPage {
id: reasonsPage
property alias myReasons: myReasons
title: qsTrId("reasons")
Description {
id: reasonsText
text: qsTrId("reasons-text")
anchors.bottomMargin: 150
}
//UserDataProvider{id:dataProvider}
MenuTextArea {
id: myReasons
text: qsTrId("aa")
anchors.horizontalCenter: reasonsText.horizontalCenter
anchors.top: reasonsText.bottom
width: reasonsText.width
//this actually works despite the warnings
//onEditingFinished: dataProvider.saveInput("myReasons", text)
}
ReasonsForm.qml:
import QtQuick 2.4
import io.qt.UserDataProvider 1.0
ReasonsForm {
UserDataProvider{id:dataProvider}
myReasons{
onEditingFinished: dataProvider.saveInput("myReasons", text)
}
}
Компилятор ни о чем не скулит, но метод из dataProvider
вообще не вызывается. Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: я нашел обходной путь, но он все еще не объясняет, почему код не работает. Способ заставить это работать без файла qml добавляет
Connections {
target: myReasons
onEditingFinished: dataProvider.saveInput("myReasons", myReasons.text)
}
в файл пользовательского интерфейса.
Я хотел бы отделить логику от пользовательского интерфейса.
РЕДАКТИРОВАТЬ II: Я что-то неправильно понимаю? Похоже, псевдонимы вообще не работают для меня. Вот простой пример, который ничего не делает (кнопка ничего не делает):