本页内容

QDesignerTaskMenuExtension Class

QDesignerTaskMenuExtension 类允许您向Qt Widgets Designer 的任务菜单中添加自定义菜单项。更多内容...

头文件: #include <QDesignerTaskMenuExtension>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer

公共函数

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

详细说明

QDesignerTaskMenuExtension 提供了一个用于创建自定义任务菜单扩展的接口。它通常用于在Qt Widgets Designer 中创建特定于某个插件的任务菜单条目。

Qt Widgets Designer Qt Widgets Designer 使用 QDesignerTaskMenuExtension 来填充其任务菜单。每当请求任务菜单时, 都会查询所选小部件的任务菜单扩展。

<span translate=Qt Widgets Designer 上下文菜单中自定义的“编辑状态...”操作的屏幕截图。" src="images/taskmenuextension-example.webp" title="Qt Widgets Designer 上下文菜单中自定义的“编辑状态...”操作的屏幕截图。"/>

任务菜单扩展是一组 QAction 对象。当选中包含该扩展的插件时,这些操作会作为条目显示在任务菜单中。上图展示了自定义的“编辑状态...”操作,它会作为Qt Widgets 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 Widgets Designer 能够仅通过QObject 指针,使用qobject_cast()函数查询所支持的接口。

您必须重写taskActions() 函数,以返回将包含在Qt Widgets Designer 任务菜单中的操作列表。 此外,您还可以重写preferredEditAction() 函数,以设置在选中您的插件并按下F2 键时调用的操作。首选的编辑操作必须是taskActions() 返回的操作之一;如果未定义该操作,按下F2键将被直接忽略。

在Qt Widgets Designer 中,扩展仅在被需要时才会被创建。例如,当您在Qt Widgets Designer 的工作区中右键单击小部件时,任务菜单扩展才会被创建。因此,您还必须使用QExtensionFactory 或其子类构建一个扩展工厂,并使用Qt Widgets Designer 的extension manager 进行注册。

当需要任务菜单扩展时,Qt Widgets Designer 中的extension manager 会遍历所有已注册的工厂,依次调用QExtensionFactory::createExtension(),直到找到一个能够为所选控件创建任务菜单扩展的工厂。随后,该工厂将创建该扩展的实例。

Qt Widgets Designer 中提供了四种扩展类型:QDesignerContainerExtension 、QDesignerMemberSheetExtension 、QDesignerPropertySheetExtension 以及 QDesignerTaskMenuExtension。无论请求的扩展是与容器、成员表、属性表还是任务菜单相关联,Qt Widgets 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 Widgets Designer 创建自定义小部件插件,以及如何使用 QDesignerTaskMenuExtension 类向Qt Widgets Designer 的任务菜单中添加自定义项目。

另请参阅 QExtensionFactory 、QExtensionManager 以及《创建自定义控件扩展》。

成员函数文档

[constexpr noexcept default] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension()

默认——构造一个QDesignerTaskMenuExtension 实例。

[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(const QDesignerTaskMenuExtension &)

复制并构造一个QDesignerTaskMenuExtension 实例。该函数已被删除。

[delete] QDesignerTaskMenuExtension::QDesignerTaskMenuExtension(QDesignerTaskMenuExtension &&)

通过移动构造一个QDesignerTaskMenuExtension 实例。此函数已被删除。

[virtual noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()

删除任务菜单扩展。

[virtual] QAction *QDesignerTaskMenuExtension::preferredEditAction() const

返回在选择具有指定扩展名的插件并按下F2 键时调用的操作。

该操作必须是taskActions() 返回的操作之一。

[pure virtual] QList<QAction *> QDesignerTaskMenuExtension::taskActions() const

返回任务菜单扩展,该扩展以操作列表的形式呈现,当选中具有指定扩展名的插件时,这些操作将被包含在Qt Widgets Designer 的任务菜单中。

必须重写该函数才能向列表中添加操作项。

[delete] QDesignerTaskMenuExtension &QDesignerTaskMenuExtension::operator=(QDesignerTaskMenuExtension &&)

将other 按移动赋值方式赋值给此QDesignerTaskMenuExtension 实例。该函数已被删除。

[delete] QDesignerTaskMenuExtension &QDesignerTaskMenuExtension::operator=(const QDesignerTaskMenuExtension &)

将other 复制并赋值给此QDesignerTaskMenuExtension 实例。此函数已被删除。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.