QDesignerTaskMenuExtension 类

QDesignerTaskMenuExtension 类允许您为 Qt Designer 的任务菜单添加自定义菜单项。 更多...

头文件 #include <QDesignerTaskMenuExtension>
CMakefind_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmakeQT += designer

公用函数

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

详细描述

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

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

任务菜单扩展是一系列 QActions。当选择具有指定扩展的插件时,这些动作将作为任务菜单中的条目出现。上面的图片显示了除 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 中有四种可用的扩展类型:QDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtensionQDesignerTaskMenuExtension。无论请求的扩展是否与容器、成员表单、属性表或任务菜单关联,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 的任务菜单添加自定义项。

另请参阅 QExtensionFactoryQExtensionManager创建自定义小部件扩展

成员函数文档

[虚函数 noexcept] QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()

销毁任务菜单扩展。

[虚函数] QAction *QDesignerTaskMenuExtension::preferredEditAction() const

返回在选中具有指定扩展的插件并按 F2 键时触发的操作。

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

[纯虚函数] QList<QAction *> QDesignerTaskMenuExtension::taskActions() const

返回任务菜单扩展作为动作列表,当选中具有指定扩展的插件时,这些动作将包含在 Qt Designer 的任务菜单中。

必须重新实现此函数以添加动作到列表中。

版权所有 2024 QtCompany Ltd。本文档中包含的文档贡献是各自所有者的版权。本文档提供的内容受 GNU 自由文档许可版 1.3 的许可,由自由软件开发基金会发布。Qt 和相关标志是芬兰的 Qt 公司以及全球其他国家的商标。所有其他商标均为其各自所有器的财产。