Лучший подход для извлечения значений из модального диалогового окна QML - PullRequest
3 голосов
/ 03 мая 2011

В моем приложении QT C ++ я вызываю QML ModalDialog с 2 кнопками (OK / CANCEL), который правильно отображается на экране и, таким образом, проблем нет.

Однако я изо всех сил пытаюсь найти способполучить в моем приложении QT C ++, какая кнопка была нажата.

Я не могу каким-то образом «зависнуть» при вызове QML ModalDialog, чтобы ждать там, пока пользователь не нажмет кнопку «ОК» или кнопку «Отмена».приложение вызывает QML ModalDialog, немедленно выходит из этой части и продолжает.

QMetaObject :: invokeMethod может вызывать функцию QML и иметь возвращаемое значение, но просто не ждет, пока пользователь нажмет одну из кнопок, он просто сразу выходит, поэтому бесполезно.

Я хочу использовать этот QML ModalDialog в нескольких местах моего приложения (модальный диалог QML может иметь другой текст, переданный из моего приложения QT C ++), поэтому я искалк универсальному решению для этого.

В общем и целом, я ищу что-то вроде этого:

C / C ++ return_value = QML_Modal_Dialog (....)

Может ли кто-нибудь указать мне правильное направление?Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Модальное диалоговое окно QML содержит два сигнала: «принято» и «отменено».Если вы предоставите обработчики для этих двух сигналов в своем коде, вы сможете узнать, какая кнопка была нажата.Для справки вы можете обратиться к ниже.

Модальный диалог Ref 1

Модальный диалог Ref 2

Надеюсь, это поможет!

0 голосов
/ 20 апреля 2016

Несмотря на то, что вопрос слишком старый, возможно, мой ответ поможет кому-то еще.

Я столкнулся с той же проблемой с диалогами в QML.Вы должны думать об этом в обязательном порядке, в то время как QML является декларативным языком, который не позволяет вам останавливать поток программы и ждать выбора пользователя.Как подсказывает Пурнима, вам следует использовать обработчики сигналов (список их для Qt 5.6 здесь ).Переместите некоторую логику вашего приложения в обработчики сигналов.

Например - если ваша функция a() выполняется на основе выбора пользователя в диалоге, вы должны вместо этого вызывать его внутри диалога в его обработчиках сигналов (например,1008 * или onRejected) с двумя различными параметрами в зависимости от типа обработчика сигнала.Думайте об этом как о разделении потока на два потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...