Класс QDesignerTaskMenuExtension
Класс QDesignerTaskMenuExtension позволяет добавлять пользовательские пункты меню в контекстное меню Qt Designer. Подробнее...
| Заголовок: | #include <QDesignerTaskMenuExtension> |
| qmake: | QT += designer |
Открытые функции
| виртуальный | ~QDesignerTaskMenuExtension() |
| виртуальный QAction * | preferredEditAction() const |
| виртуальный QList<QAction *> | taskActions() const = 0 |
Подробное описание
Класс QDesignerTaskMenuExtension позволяет добавлять пользовательские пункты меню в контекстное меню Qt Designer.
QDesignerTaskMenuExtension предоставляет интерфейс для создания пользовательских расширений контекстного меню. Обычно используется для создания пунктов контекстного меню, специфичных для плагина в Qt Designer.
Qt Designer использует QDesignerTaskMenuExtension для заполнения контекстного меню. Каждый раз, когда запрашивается контекстное меню, Qt Designer запросит расширение контекстного меню для выбранного виджета.
Расширение контекстного меню представляет собой набор объектов QAction. Действия отображаются в виде пунктов контекстного меню при выборе плагина с указанным расширением. На рисунке показано пользовательское действие Изменить состояние..., которое появляется дополнительно к стандартным пунктам контекстного меню Qt Designer: Вырезать, Копировать, Вставить и т. д.
Для создания пользовательского расширения контекстного меню ваш класс расширения должен наследоваться как от QObject, так и от QDesignerTaskMenuExtension. Например:
class MyTaskMenuExtension : public QObject,
public QDesignerTaskMenuExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerTaskMenuExtension)
public:
MyTaskMenuExtension(MyCustomWidget *widget, QObject *parent);
QAction *preferredEditAction() const;
QList<QAction *> taskActions() const;
private slots:
void mySlot();
private:
MyCustomWidget *widget;
QAction *myAction;
}; Поскольку мы реализуем интерфейс, мы должны убедиться, что он известен системе метаобъектов, используя макрос Q_INTERFACES(). Это позволяет Qt Designer использовать функцию qobject_cast() для запроса поддерживаемых интерфейсов, используя только указатель на объект QObject.
Вы должны переопределить функцию taskActions() для возврата списка действий, которые будут включены в контекстное меню Qt Designer. Необязательно переопределить функцию preferredEditAction() для установки действия, вызываемого при выборе вашего плагина и нажатии клавиши F2. Выбранное действие редактирования должно быть одним из действий, возвращаемых функцией taskActions(), и если оно не определено, нажатие клавиши F2 будет просто проигнорировано.
В Qt Designer расширения создаются только по мере необходимости. Например, расширение контекстного меню создается при нажатии правой кнопкой мыши по виджету в рабочем пространстве Qt Designer. Поэтому вы также должны создать фабрику расширения, используя QExtensionFactory или подкласс, и зарегистрировать её с помощью менеджера расширений Qt Designer.
При необходимости расширения контекстного меню, менеджер расширений Qt Designer перебирает все зарегистрированные фабрики, вызывая QExtensionFactory::createExtension() для каждой, пока не найдёт фабрику, которая способна создать расширение контекстного меню для выбранного виджета. Эта фабрика затем создаст экземпляр расширения.
В Qt Designer доступны четыре типа расширений: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension и QDesignerTaskMenuExtension. Поведение Qt Designer одинаково, независимо от того, ассоциировано ли запрашиваемое расширение с контейнером, листком членов, листком свойств или контекстным меню.
Класс QExtensionFactory предоставляет стандартную фабрику расширений и также может использоваться как интерфейс для пользовательских фабрик расширений. Вы можете либо создать новую фабрику QExtensionFactory и переопределить функцию QExtensionFactory::createExtension(). Например:
QObject *ANewExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
if (iid != Q_TYPEID(QDesignerTaskMenuExtension))
return 0;
if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object))
return new MyTaskMenuExtension(widget, parent);
return 0;
} Или вы можете использовать существующую фабрику, расширив функцию QExtensionFactory::createExtension(), чтобы сделать фабрику способной создавать расширение контекстного меню. Например:
QObject *AGeneralExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
return new MyContainerExtension(widget, parent);
} else if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
return new MyTaskMenuExtension(widget, parent);
} else {
return 0;
}
} Для получения полного примера использования класса QDesignerTaskMenuExtension см. пример Расширение контекстного меню. В примере показано, как создать пользовательский плагин виджета для Qt Designer и как использовать класс QDesignerTaskMenuExtension для добавления пользовательских элементов в контекстное меню Qt Designer.
См. также QExtensionFactory, QExtensionManager и Создание пользовательских расширений виджетов.
Документация функций-членов
[virtual] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()
Уничтожает расширение контекстного меню.
[virtual] QAction *QDesignerTaskMenuExtension::preferredEditAction() const
Возвращает действие, которое вызывается при выборе плагина с заданным расширением и нажатии клавиши F2.
Действие должно быть одним из действий, возвращаемых функцией taskActions().
[pure virtual] QList<QAction *> QDesignerTaskMenuExtension::taskActions() const
Возвращает расширение контекстного меню в виде списка действий, которые будут включены в контекстное меню Qt Designer при выборе плагина с указанным расширением.
Функция должна быть переопределена для добавления действий в список.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qdesignertaskmenuextension.html