Все приложение у меня построено на StackView. В приложении есть страница выбора файла, которое используется в нескольких частях приложения. В коде она описана так:
StackView {
id: stackView
...
// Страница с виджетом выбора файла
Component {
id: fileSelectDialogComponent
FileSelect {
id: fileSelectDialog
anchors.fill: parent
enabled: Stack.status === Stack.Active
}
}
Выбор файла вызывается так:
// Вызывается диалог выбора файла
qmlGlobalParameters.fileSelectDialogStartDirectory="тут_имя_директории";
qmlGlobalParameters.fileSelectDialogStartFileName="тут_имя_файла";
qmlGlobalParameters.fileSelectDialogResult="";
stackView.push( fileSelectDialogComponent );
Страница выбора файла сама себя закрывает через вызов pop() для stackView при нажатии кнопки Ok или Cancel.
Теперь сами проблемы:
Так как тип Component не позволяет создавать себе свойства, а позволяет только задавать идентификатор id, то я не могу «вытащить» fileSelectDialog как свойство property alias для fileSelectDialogComponent. Поэтому мне приходится передавать параметры в объект fileSelectDialog не напрямую (потому что я достучаться до него не могу), а через глобальный объект qmlGlobalParameters, о котором «знает» и вызывающий код, и сам тип fileSelectDialog. И это мне очень не нравится. Я сделал вот так «чтоб работало», но хочу переделать так, чтобы по нормальному передавать данные в объект, а так же чтобы иметь возможность работать с сигналами этого объекта.
Но пока этого не сделано, мне нужно научиться ловить момент «выталкивания» компонента fileSelectDialogComponent из стека, чтобы обработать сделанный в этом компоненте выбор файла. В StackView нет сигналов, которые бы вызывались при действии pop(). Привязаться к сигналам fileSelectDialog я не могу, потому что он сидит внутри fileSelectDialogComponent, и потому достучаться до него невозможно. У самого типа Component объекта fileSelectDialogComponent тоже нет сигналов, оповещающих о том что он выталкивается из стека. В общем, везде какие-то странные ограничения, из-за которых я не могу поймать момент завершения работы страницы выбора файла.
Вопрос: как можно отловить этот момент в существующей структуре кода? А как можно изменить код, чтобы вышеуказанных проблем не стояло в принципе?