Spec-Zone.ru › Qt 6.0

Класс QDesignerTaskMenuExtension

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

Заголовок: #include <QDesignerTaskMenuExtension>
CMake: find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
  • Список всех членов, включая унаследованные

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

виртуальный ~QDesignerTaskMenuExtension()
виртуальный QAction * preferredEditAction() const
виртуальный 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-6.0/qdesignertaskmenuextension.html

Spec-Zone.ru

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