Класс 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 запрашивает расширение контекстного меню для выбранного виджета.
Расширение контекстного меню представляет собой коллекцию 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.11/qdesignertaskmenuextension.html