Qt отменить / повторить и темы - PullRequest
0 голосов
/ 31 мая 2018

В моем приложении MDI я использую инфраструктуру Qt undo / redo, и она работает очень хорошо.

Теперь я реализовал операцию, которая требует много времени, поэтому я хотел бы запустить ее в другом потокечтобы приложение не зависало и пользователь мог работать с другими окнами MDI.

Поэтому мне нужно запустить операцию в новом потоке внутри метода redo() моего QUndoCommand.Это проблема, потому что:

  1. Если внутри метода redo() я дождусь завершения потока, приложение зависнет, поэтому оно бесполезно.
  2. Если я не будуt ожидание завершения потока, метод redo() возвращается до завершения операции, и это может вызвать множество проблем и ошибок (например, если пользователь использует механизм отмены / возврата, возможно, что команды, следующие за потокомкоманда выполняется до ее завершения).

Есть идеи?

1 Ответ

0 голосов
/ 31 мая 2018

У вас гораздо большие проблемы, чем отмена / повтор.Измените архитектуру, чтобы поведение системы было нормальным, когда идет асинхронная обработка данных.Объект диспетчера данных должен указывать, когда он занят, и пользовательский интерфейс должен отражать это.Как только вы все заработаете, отмена / повтор также будет работать магическим образом.

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