Spec-Zone.ru › Qt 5.9

Класс 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

Spec-Zone.ru

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