Класс действия QAction


Зачастую оконный интерфейс программы построен таким образом, что пользователь может выполнить требуемое действие несколькими разными способами. Одним пользователям нравится использовать главное меню приложения, другие предпочитают вызывать контекстное кликом по правой кнопке мыши, третьим по душе нажимать кнопки на панели инструментов. Для того, чтобы с приложением было удобно работать разным пользователям, программисту необходимо реализовать все возможные способы взаимодействия пользователя и программы. Чтобы облегчить эту задачу разработчикам в Qt реализован класс QAction.

Действие QAction — это очень мощный концепт, ускоряющий разработку приложений. Если бы его не было, то вам нужно было бы создавать команды меню, соединять их со слотами, затем создавать панели инструментов и соединять их с теми же слотами и т. д. Это могло бы привести к дублированию программного кода и вызвать проблемы при синхронизации элементов пользовательского интерфейса. Например, представьте себе, что вам нужно было бы сделать одну из команд меню недоступной, а для этого вам нужно сделать ее недоступной в меню, а потом проделать то же самое и с кнопкой панели инструментов этой команды.

Объекты класса QAction предоставляют решение этой проблемы. Этот концепт значительно упрощает программирование. Например, команда меню

File | New (Файл | Создать) дублируется кнопкой на панели инструментов, и для них можно создать один объект действия. Тем самым, если вдруг команду потребуется сделать недоступной, мы будем иметь дело только с одним объектом.

Класс QAction объединяет следующие элементы интерфейса пользователя:

  • текст для всплывающего меню;
  • текст для всплывающей подсказки;
  • текст подсказки "Что это";
  • "горячие" клавиши;
  • ассоциированные пиктограммы;
  • шрифт;
  • строку состояния.

Для установки каждого из вышеперечисленных элементов в объекте QAction существует свой метод. Например:


QAction* pactSave = new QAction("file save action", 0);
pactSave->setText("&Save");
pactSave->setShortcut(QKeySequence("CTRL+S"));
pactSave->setToolTip("Save Document");
pactSave->setStatusTip("Save the file to disk");
pactSave->setWhatsThis("Save the file to disk");
pactSave->setIcon(QPixmap(img4_xpm));
connect(pactSave, SIGNAL(triggered()), SLOT(slotSave()));
QMenu* pmnuFile = new QMenu("&File"); 
pmnu->addAction(pactSave); 
QToolBar* ptb = new QToolBar("Linker ToolBar");
ptb->addAction(pactSave);

Метод addAction() позволяет внести объект действия в нужный виджет. В нашем примере это виджет всплывающего меню QMenu (указатель pmnuFile) и панель инструментов QToolBar (указатель ptb).

Читать далее: SDI- и MDI-приложения в Qt