class QDesignerContainerExtension#

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

摘要#

方法#

虚拟方法#

备注

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

详细描述#

警告

本部分包含自动将C++代码片段翻译为Python代码的摘录,可能包含错误。

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

QDesignerContainerExtension 提供了一个创建自定义容器扩展的接口。容器扩展由一组函数组成,这些函数是Qt 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 Designer 能够仅使用 QObject 指针就通过 qobject_cast() 函数查询支持哪些接口。

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

Qt Designer 中,扩展只有在需要时才会创建。因此,您还必须创建一个 QExtensionFactory ,即能够创建您的扩展实例的类,并使用 Qt Designerextension manager 进行注册。

当需要容器扩展时,Qt Designerextension manager 将遍历其所有已注册的工厂,并为每个调用 createExtension(),直到找到第一个能够创建容器扩展的工厂。然后,该工厂将为插件创建扩展。

Qt Designer 中有四种扩展类型可用:QDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtensionQDesignerTaskMenuExtension。无论请求的扩展是否与多页容器、成员表、属性表或任务菜单相关联,Qt 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 Designer 创建自定义多页插件。

参阅

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

__init__()#
抽象addWidget(widget)#
参数:

widgetQWidget

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

抽象canAddWidget()#
返回类型:

布尔型

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

对于像 QScrollArea 或 QDockWidget 这样只有一个固定页面的容器,应返回 false。

抽象canRemove(index)#
参数:

index – 整型

返回类型:

布尔型

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

对于像 QScrollArea 或 QDockWidget 这样只有一个固定页面的容器,应返回 false。

抽象 count()#
返回类型:

int

返回容器中的页面数量。

抽象 currentIndex()#
返回类型:

int

返回容器中当前选中文档的索引。

抽象 insertWidget(index, widget)#
参数:
  • index – 整型

  • widgetQWidget

通过在扩展页面列表中的指定索引处插入给定页面,将给定页面添加到容器中。

抽象 remove(index)#
参数:

index – 整型

从扩展页面列表的给定索引处删除页面。

抽象 setCurrentIndex(index)#
参数:

index – 整型

将容器中当前选中文档设置为扩展页面列表中索引为给定值的页面。

抽象 widget(index)#
参数:

index – 整型

返回类型:

QWidget

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