Класс QDesignerTaskMenuExtension
Класс QDesignerTaskMenuExtension позволяет добавлять пользовательские пункты меню в контекстное меню Qt Designer. Подробнее...
| Заголовок: | #include <QDesignerTaskMenuExtension> |
| qmake: | QT += designer |
Открытые функции
| virtual | ~QDesignerTaskMenuExtension() |
| virtual QAction * | preferredEditAction() const |
| virtual QList<QAction *> | taskActions() const = 0 |
Подробное описание
Класс QDesignerTaskMenuExtension позволяет добавлять пользовательские пункты меню в контекстное меню Qt Designer.
QDesignerTaskMenuExtension предоставляет интерфейс для создания пользовательских расширений контекстного меню. Обычно используется для создания пунктов контекстного меню, специфичных для плагина в Qt Designer.
Qt Designer использует QDesignerTaskMenuExtension для заполнения контекстного меню. Всякий раз, когда требуется контекстное меню, Qt Designer запрашивает расширение контекстного меню для выбранного виджета.
Расширение контекстного меню — это набор QActions. Действия отображаются как пункты в контекстном меню при выборе плагина с указанным расширением. На изображении показано пользовательское действие Изменить состояние..., которое отображается дополнительно к стандартным пунктам контекстного меню 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/qt-5.9/qdesignertaskmenuextension.html