Есть у меня приложение, которое состоит из страниц. Страницы оформлены в виде типов Component. Страницы объединены в StackView, через него я их и переключаю.
Есть страница fileSelectDialogComponent, которая представляет из себя самодельный виджет выбора файла:
// Объединение страниц интерфейса в структуру StackView для возможности переключения между ними
StackView {
id: stackView
// Окно с основным меню
Component {
id: mainMenuStackComponent
MainMenu {
id: mainMenu
anchors.fill: parent
enabled: Stack.status === Stack.Active
}
}
...
// Страница с виджетом выбора файла
Component {
id: fileSelectDialogComponent
FileSelect {
id: fileSelectDialog
anchors.fill: parent
enabled: Stack.status === Stack.Active
}
}
Вызывается эта страница так:
// Выбор файла
Connections {
target: fileSelectButton
onClicked: stackView.push( fileSelectDialogComponent )
}
Вопрос в том, каким образом передать имя выбранного файла из страницы fileSelectDialogComponent в страницу mainMenuStackComponent. Причем предать это дело локально, а не через глобальный объект.
Проблема в том, что тип Component - это такой странный тип, в котором нельзя создавать свойства. Если я сразу после строки «id: fileSelectDialogComponent» попробую написать:
property alias fileSelectDialog: fileSelectDialog
чтобы «вытащить наружу» виджет FileSelect, то будет ошибка:
qrc:/qmlCode/main.qml:96 Component objects cannot declare new properties.
Так же я не могу достучаться до mainMenu, потому что он находится внутри mainMenuStackComponent, и я так же не могу этот mainMenu вытащить наружу, и не могу в него засунуть имя выбранного файла.
Так же невозможно соединить сигнал-слот так, чтобы сигнал испустился в одном компоненте (выбора файла), и был пойман в слоте компонента, который тоже есть в стеке (основное меню). Неозможно потому, что невозможно связать сигнал-слот, потому что внутрь компонента невозможно влезть, а сам компонент не дает возмжности вывести объекты или их свойства наружу.
Вот. Вопрос: как мне все-таки пробросить данные из одного компонента в другой? Неужели придется делать через глобальную переменную?