Spec-Zone.ru › Qt

Обзор механизма отмены Qt

Введение

Механизм отмены Qt — это реализация паттерна Команда, предназначенная для реализации функций отмены/повторного выполнения действий в приложениях.

Паттерн Команда основан на идее, что все правки в приложении выполняются путём создания экземпляров объектов команды. Объекты команды применяют изменения к документу и хранятся в стеке команд. Кроме того, каждая команда знает, как отменить свои изменения, чтобы вернуть документ в предыдущее состояние. Пока приложение использует только объекты команды для изменения состояния документа, можно отменить последовательность команд, перебирая стек вниз и вызывая отмену для каждой команды. Также можно повторить последовательность команд, перебирая стек вверх и вызывая повторное выполнение для каждой команды.

Классы

Фреймворк состоит из четырёх классов:

  • QUndoCommand — базовый класс для всех команд, хранящихся в стеке отмены. Он может применить (повторить) или отменить одно изменение в документе.
  • QUndoStack — список объектов QUndoCommand. Он содержит все команды, выполненные над документом, и может прокрутить состояние документа назад или вперёд, отменяя или повторяя их.
  • QUndoGroup — группа стеков отмены. Она полезна, когда приложение содержит более одного стека отмены, обычно один на каждый открытый документ. QUndoGroup предоставляет единую пару слотов отмены/повторного выполнения для всех стеков в группе. Она перенаправляет запросы на отмену и повторное выполнение в активный стек, который связан с документом, который в данный момент редактирует пользователь.
  • QUndoView — виджет, который отображает содержимое стека отмены. Нажатие на команду в представлении прокручивает состояние документа назад или вперёд к этой команде.

Концепции

Фреймворк поддерживает следующие концепции:

  • Состояние чистоты (Clean state): Используется для сигнализации о входе и выходе документа в состояние, сохранённое на диске. Обычно используется для отключения или включения действий сохранения и для обновления строчки заголовка документа.
  • Сжатие команд (Command compression): Используется для сжатия последовательности команд в одну команду. Например: В текстовом редакторе команды, вставляющие отдельные символы в документ, можно сжать в одну команду, вставляющую целые фрагменты текста. Эти более крупные изменения удобнее отменить и повторить пользователю.
  • Макросы команд (Command macros): Последовательность команд, все из которых отменяются или повторяются за один шаг. Это упрощает задачу написания приложения, поскольку набор более простых команд можно объединить в более сложные команды. Например, команда, перемещающая набор выделенных объектов в документе, может быть создана путём объединения набора команд, каждая из которых перемещает один объект.

QUndoStack предоставляет удобные объекты QAction для отмены и повторения, которые можно вставить в меню или панель инструментов. Свойства текста этих действий всегда отражают, какая команда будет отменена или повторена при их запуске. Аналогично, QUndoGroup предоставляет действия отмены и повторения, которые всегда ведут себя как действия отмены и повторения активного стека.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qundo.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API