Spec-Zone.ru › Qt 5.12

Класс 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/qt-5.12/qdesignertaskmenuextension.html

Spec-Zone.ru

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