Spec-Zone.ru › Qt 5.15

Класс 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. Действия отображаются как пункты в меню задач при выборе плагина с указанным расширением. На рисунке выше показано пользовательское действие Edit State..., которое появляется в дополнение к стандартным пунктам меню задач Qt Designer: Cut, Copy, Paste и т. д.

Чтобы создать пользовательское расширение меню задач, ваш класс расширения должен унаследовать как от 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.15/qdesignertaskmenuextension.html

Spec-Zone.ru

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