PySide6.QtDesigner.QDesignerTaskMenu扩展

class QDesignerTaskMenuExtension

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

概要

方法

虚拟方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

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

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

../../_images/taskmenuextension-example.webp

任务菜单扩展是一组QActions的集合。当选择具有指定扩展的插件时,这些操作会作为条目出现在任务菜单中。上图显示了自定义的编辑状态…操作,它出现在Qt Widgets Designer的默认任务菜单条目之外:剪切复制粘贴等。

要创建自定义任务菜单扩展,您的扩展类必须同时继承自 QObject 和 QDesignerTaskMenuExtension。例如:

class MyTaskMenuExtension(QObject,
        public QDesignerTaskMenuExtension

    Q_OBJECT
    Q_INTERFACES(QDesignerTaskMenuExtension)
# public
    MyTaskMenuExtension(MyCustomWidget widget, QObject parent)
    preferredEditAction = QAction()
*> = QList<QAction()
# private slots
    def mySlot():
# private
    widget = MyCustomWidget()
    myAction = QAction()

由于我们正在实现一个接口,我们必须确保使用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 将遍历所有已注册的工厂,为每个工厂调用 createExtension(),直到找到一个能够为所选小部件创建任务菜单扩展的工厂。然后,该工厂将创建扩展的实例。

Qt Widgets Designer 中有四种可用的扩展类型:QDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtensionQDesignerTaskMenuExtension。无论请求的扩展是与容器、成员表、属性表还是任务菜单相关联,Qt Widgets Designer 的行为都是相同的。

QExtensionFactory 类提供了一个标准的扩展工厂,也可以用作自定义扩展工厂的接口。你可以创建一个新的 QExtensionFactory 并重新实现 createExtension() 函数。例如:

QObject ANewExtensionFactory.createExtension(QObject object,
        QString iid, QObject parent)

    if iid != Q_TYPEID(QDesignerTaskMenuExtension):
        return 0
    if MyCustomWidget widget = MyCustomWidget(object):
        return MyTaskMenuExtension(widget, parent)
    return 0

或者你可以使用现有的工厂,扩展createExtension()函数,使工厂也能够创建任务菜单扩展。例如:

QObject AGeneralExtensionFactory.createExtension(QObject object,
        QString iid, QObject parent)

    widget = MyCustomWidget(object)
    if widget and (iid == Q_TYPEID(QDesignerContainerExtension)):
        return MyContainerExtension(widget, parent)
     elif widget and (iid == Q_TYPEID(QDesignerTaskMenuExtension)):
        return MyTaskMenuExtension(widget, parent)
    else:
        return 0

有关使用QDesignerTaskMenuExtension类的完整示例,请参见任务菜单扩展示例。该示例展示了如何为Qt Widgets Designer创建自定义小部件插件,以及如何使用QDesignerTaskMenuExtension类向Qt Widgets Designer的任务菜单添加自定义项。

另请参阅

QExtensionFactory QExtensionManager 创建自定义小部件扩展

__init__()
preferredEditAction()
Return type:

QAction

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

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

abstract taskActions()
Return type:

QAction的列表

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

必须重新实现该函数以将操作添加到列表中。