Сделал окошечко на базе Dialog, сделал две кнопки [OK] и [Cancel] плюс в уголку кнопка закрытия [X].
[OK] - вызывает accept()
[Cancel] - вызывает reject()
[X] - вызывает close()
И, естественно, прописал диалогу обработчики:
onAccepted() { ... Действие 1 ... }
onRejected() { ... Действие 2 ... }
onClose() { ... Действие 3 ... }
Проблема в том, что если нажать OK или Cancel, то вначале QML сгенерирует вызов onClose(), и только потом onAccepted() или onRejected().
Получается, что хочу я того или не хочу, при нажатии OK будет выполнено:
Действие 3
Действие 1
А при нажатии Cancel будет выполнено:
Действие 3
Действие 2
Но в моей программе важна последовательность действий. И мне нужно, в идеале, как-то сделать, чтобы при нажатии OK или Cancel срабатывал только тот код, который написан в их обработчике.
Если это невозможно, то хотя бы сделать так, чтобы для ОК выполнялось:
Действие 1
Действие 3
А для Cancel выполнялось:
Действие 1
Действие 2
Как этого добиться?
Другими словами: в onClose() надо каким-то образом узнать, это «чистое» закрытие окна, или закрытие через кнопку OK/Close. И дело усложняется тем, что onClose() вызывается ПЕРЕД onAccepted()/onRejected(), то есть невозможно выставить, например, переменную-флаг, на которую можно было бы ориентироваться.