Qt의 실행 취소 프레임워크 개요
소개
Qt의 실행 취소(Undo) 프레임워크는 애플리케이션에서 실행 취소/다시 실행(Undo/Redo) 기능을 구현하기 위한 명령(Command) 패턴의 구현체입니다.
Command 패턴은 애플리케이션의 모든 편집 작업이 명령 객체의 인스턴스를 생성하여 수행된다는 개념을 기반으로 합니다. 명령 객체는 문서에 변경 사항을 적용하며 명령 스택에 저장됩니다. 또한, 각 명령은 문서를 이전 상태로 되돌리기 위해 자신의 변경 사항을 취소하는 방법을 알고 있습니다. 애플리케이션이 문서의 상태를 변경할 때 명령 객체만을 사용하는 한, 스택을 아래로 탐색하며 각 명령에 대해 차례로 undo를 호출함으로써 일련의 명령을 취소할 수 있습니다. 또한 스택을 위로 탐색하며 각 명령에 대해 redo를 호출함으로써 일련의 명령을 다시 실행할 수도 있습니다.
클래스
이 프레임워크는 네 가지 클래스로 구성됩니다:
- QUndoCommand 는 취소 스택에 저장된 모든 명령의 기본 클래스입니다. 이 클래스는 문서의 단일 변경 사항을 적용(다시 실행)하거나 취소할 수 있습니다.
- QUndoStack 는 ` QUndoCommand ` 객체들의 리스트입니다. 이 리스트에는 문서에서 실행된 모든 명령이 포함되어 있으며, 해당 명령을 되돌리거나 다시 실행하여 문서의 상태를 이전이나 이후 상태로 되돌릴 수 있습니다.
- QUndoGroup 는 여러 개의 실행 취소 스택으로 구성된 그룹입니다. 이것은 애플리케이션에 하나 이상의 실행 취소 스택이 포함되어 있을 때 유용하며, 일반적으로 열려 있는 문서마다 하나씩 존재합니다. ` QUndoGroup `은 그룹 내의 모든 스택에 대해 하나의 실행 취소/다시 실행 슬롯 쌍을 제공합니다. 이 클래스는 실행 취소 및 다시 실행 요청을 활성 스택으로 전달하며, 활성 스택이란 사용자가 현재 편집 중인 문서와 연관된 스택을 의미합니다.
- QUndoView 는 실행 취소 스택의 내용을 표시하는 위젯입니다. 뷰에서 명령을 클릭하면 문서의 상태를 해당 명령 지점까지 앞뒤로 이동시킵니다.
개념
이 프레임워크는 다음 개념을 지원합니다:
- 클린 상태: 문서가 디스크에 저장된 상태로 진입하거나 해당 상태를 벗어날 때 이를 알리는 데 사용됩니다. 이는 일반적으로 저장 작업을 비활성화하거나 활성화하고, 문서의 제목 표시줄을 업데이트하는 데 사용됩니다.
- 명령 압축: 일련의 명령을 단일 명령으로 압축하는 데 사용됩니다. 예를 들어, 텍스트 편집기에서 문서에 개별 문자를 삽입하는 명령을 전체 텍스트 구절을 삽입하는 단일 명령으로 압축할 수 있습니다. 이러한 대규모 변경 사항은 사용자가 실행 취소 및 다시 실행을 수행하기에 더 편리합니다.
- 명령 매크로: 일련의 명령으로 구성되며, 이 모든 명령은 한 번의 단계로 되돌리거나 다시 실행할 수 있습니다. 이를 통해 더 간단한 명령 집합을 조합하여 더 복잡한 명령을 만들 수 있으므로, 애플리케이션 작성 작업을 단순화할 수 있습니다. 예를 들어, 문서에서 선택된 객체 집합을 이동하는 명령은 각각 단일 객체를 이동하는 일련의 명령을 결합하여 만들 수 있습니다.
QUndoStack 메뉴나 툴바에 삽입할 수 있는 편리한 실행 취소 및 다시 실행 QAction 객체를 제공합니다. 이러한 액션의 텍스트 속성은 트리거될 때 어떤 명령이 실행 취소되거나 다시 실행될지를 항상 반영합니다. 마찬가지로, QUndoGroup 는 항상 활성 스택의 실행 취소 및 다시 실행 액션과 동일하게 동작하는 실행 취소 및 다시 실행 액션을 제공합니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.