2013-03-03 10 views
5

Uczę się używać Qt do tworzenia aplikacji & Jestem dość udany w rozwijaniu mojej aplikacji. Teraz chcę zaimplementować funkcję cofania powtórzeń dla mojej aplikacji. Numer doc dla tego tematu zawiera niewiele informacji. Próbowałem nawet zrozumieć z 2 przykładów w SDK. Ale ciężko mi zrozumieć, jak to działa. Czy ktoś może zadać mi trud wyjaśnienia mi, jak to zrobić? Istnieją różne stan w mojej aplikacji, dla których chcę zapewnić tę funkcjonalność. Czy wyjaśnienie może być z ogólnego punktu widzenia? Jeśli istnieją już artykuły w Internecie wyjaśniające to samo, proszę powiadom mnie o nich. Byłoby to bardzo pomocne. Dziękuję.Nie można zrozumieć Undo Redo Framework w Qt

+0

Czego nie rozumiesz? Określone klasy? Przegląd ? – Synxis

+0

Potrafię zrozumieć 4 klasy i ich cel, ale nie wiem, jak z nich korzystać, np. Powiedz QUndoCommand. –

Odpowiedz

8

Istnieją 2 podstawowe klasy: QUndoCommand i QUndoStack;

  1. QUndoCommand jest klasą podstawową klasy poleceń. Musisz samodzielnie zaimplementować funkcje cofania() i ponownego wykonywania().
  2. QUndoStack jest w zasadzie pojemnik obiektów QUndoCommand z dodatkowych metod, takich jak tworzenie QAction, cofanie Query/przerobić tekst obecnego QUndoCommand (proste funkcje, które można wdrożyć się łatwo)

Co trzeba zrobić, to:

  1. Zaimplementuj swoje polecenia. Musisz zdecydować, jak zaimplementować ponowne wykonanie/cofnij się w zależności od potrzeb. klasa AppendText jest dobrym przykładem: http://qt-project.org/doc/qt-5.0/qtwidgets/qundocommand.html
  2. Zachowaj instancję QUndoStack dla każdego dokumentu (lub jedną instancję, jeśli w aplikacji jest tylko jeden dokument).
  3. Powiedzmy, że masz klasę poleceń "AppendText" i przycisk "Append" w interfejsie użytkownika. Jeśli klikniesz przycisk "Dołącz", musisz utworzyć instancję polecenia AppendText i wywołać QUndoStack :: push (appendCmd). QUndoStack :: push() najpierw wywoła AppendText :: redo(), a następnie umieści go w pojemniku w celu cofnięcia.

To wszystko.

+1

Yup Rozumiem niektóre kawałki i kawałki, ale nie mogę zrozumieć, dlaczego miałbym użyć Qt Undo Redo Framework? Czy wygodniej byłoby zaimplementować własną klasę, która ma całą historię sesji, a następnie cofnąć/ponowić zgodnie ze stanem? Wszystko, co chcę zapytać, to co otrzymałem z wbudowanej platformy Qt w porównaniu do mojego własnego środowiska dostosowanego do mojej aplikacji? –

+1

Dla prostych aplikacji, struktura cofania qt może zaoszczędzić sporo czasu. Ale jeśli masz lepsze rozwiązanie dla swojej sprawy, po prostu idź za tym. W rozwiązaniu qt nie ma nic tajemniczego, co zmusiłoby go do użycia. – Chen

+0

ok dzięki za pomoc. –

Powiązane problemy