PySide6.QtDesigner.QDesignerContainerExtension

class QDesignerContainerExtension

QDesignerContainerExtension 类允许您在 Qt Widgets Designer 的工作区中向自定义多页容器添加页面。更多

概要

方法

虚拟方法

注意

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

详细描述

警告

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

../../_images/containerextension-example.webp

QDesignerContainerExtension 提供了一个用于创建自定义容器扩展的接口。容器扩展由一组Qt Widgets Designer需要管理多页容器插件的函数和容器页面的列表组成。

警告

这不是一个用于容器插件的扩展,仅适用于自定义的多页面容器。

要创建一个容器扩展,您的扩展类必须同时继承自QObject和QDesignerContainerExtension。例如:

class MyContainerExtension(QObject,
       public QDesignerContainerExtension

    Q_OBJECT
    Q_INTERFACES(QDesignerContainerExtension)
# public
    MyContainerExtension(MyCustomWidget widget,
                         parent = 0)
    count = int()
    widget = QWidget(int index)
    currentIndex = int()
    def setCurrentIndex(index):
    def addWidget(widget):
    def insertWidget(index, widget):
    def remove(index):
# private
    myWidget = MyCustomWidget()

由于我们正在实现一个接口,我们必须确保使用Q_INTERFACES()宏将其告知元对象系统。这使得Qt Widgets Designer能够仅使用QObject指针通过qobject_cast()函数查询支持的接口。

你必须重新实现几个函数以使Qt Widgets Designer能够管理一个自定义的多页面容器小部件:Qt Widgets Designer使用count()来跟踪容器中的页面数量,使用widget()返回容器页面列表中给定索引处的页面,并使用currentIndex()返回所选页面的列表索引。Qt Widgets Designer使用addWidget()函数将给定页面添加到容器中,期望它被追加到页面列表中,同时它期望insertWidget()函数通过在给定索引处插入来将给定页面添加到容器中。

在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(QDesignerContainerExtension):
        return 0
    if (MyCustomWidget widget = qobject_cast<MyCustomWidget>
           (object))
        return MyContainerExtension(widget, parent)
    return 0

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

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

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

有关使用QDesignerContainerExtension类的完整示例,请参见容器扩展示例。该示例展示了如何为Qt Widgets Designer创建一个自定义的多页面插件。

另请参阅

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

__init__()
abstract addWidget(widget)
Parameters:

widgetQWidget

通过将给定的page添加到扩展的页面列表中,将其添加到容器中。

abstract canAddWidget()
Return type:

布尔

返回是否可以添加小部件。这决定了添加上下文菜单选项以添加或插入页面是否启用。

对于具有单个固定页面的容器,例如 QScrollArea 或 QDockWidget,这应该返回 false。

另请参阅

addWidget() canRemove()

abstract canRemove(index)
Parameters:

索引 – int

Return type:

布尔

返回给定index处的小部件是否可以被移除。这决定了是否启用移除当前页面的上下文菜单选项。

对于具有单个固定页面的容器,例如 QScrollArea 或 QDockWidget,这应该返回 false。

另请参阅

remove() canAddWidget()

abstract count()
Return type:

整数

返回容器中的页数。

abstract currentIndex()
Return type:

整数

返回容器中当前选定页面的索引。

另请参阅

setCurrentIndex()

abstract insertWidget(index, widget)
Parameters:
  • index – 整数

  • widgetQWidget

通过将给定的page插入到扩展页面列表中的指定index,将其添加到容器中。

abstract remove(index)
Parameters:

索引 – int

从扩展的页面列表中移除给定index处的页面。

abstract setCurrentIndex(index)
Parameters:

索引 – int

将容器中当前选定的页面设置为扩展程序页面列表中给定index处的页面。

另请参阅

currentIndex()

abstract widget(index)
Parameters:

索引 – int

Return type:

QWidget

返回扩展页面列表中给定index处的页面。