Spec-Zone.ru › Qt 5.14

Класс QDesignerTaskMenuExtension

Класс QDesignerTaskMenuExtension позволяет добавлять пользовательские пункты меню в контекстное меню задач Qt Designer. Подробнее...

Заголовок: #include <QDesignerTaskMenuExtension>
qmake: QT += designer
  • Список всех членов, включая унаследованные

Открытые функции

virtual ~QDesignerTaskMenuExtension()
virtual QAction * preferredEditAction() const
virtual QList<QAction *> taskActions() const = 0

Подробное описание

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.14/qdesignertaskmenuextension.html

Spec-Zone.ru

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