Spec-Zone.ru › Qt

Класс QDesignerTaskMenuExtension

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

Заголовок: #include <QDesignerTaskMenuExtension>
CMake: find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer)
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-6.2/qdesignertaskmenuextension.html

Spec-Zone.ru

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