- class QDesignerContainerExtension#
QDesignerContainerExtension
类允许您向 Qt Designer 的工作区中的自定义多页容器添加页面。 更多信息…摘要#
方法#
def
__init__()
虚拟方法#
def
addWidget()
def
canAddWidget()
def
canRemove()
def
count()
def
currentIndex()
def
insertWidget()
def
remove()
def
widget()
备注
本文档可能包含自动将C++代码片段翻译为Python代码的摘录。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单的方式来通知我们。
详细描述#
警告
本部分包含自动将C++代码片段翻译为Python代码的摘录,可能包含错误。
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 Designer 的extension manager
进行注册。当需要容器扩展时,Qt Designer 的
extension manager
将遍历其所有已注册的工厂,并为每个调用createExtension()
,直到找到第一个能够创建容器扩展的工厂。然后,该工厂将为插件创建扩展。Qt Designer 中有四种扩展类型可用:
QDesignerContainerExtension
,QDesignerMemberSheetExtension
,QDesignerPropertySheetExtension
和QDesignerTaskMenuExtension
。无论请求的扩展是否与多页容器、成员表、属性表或任务菜单相关联,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__()#
通过将给定
page
添加到扩展的页面列表中,将给定的page
添加到容器中。- 抽象canAddWidget()#
- 返回类型:
布尔型
返回是否可以添加小部件。这决定了是否启用添加或插入页面的上下文菜单选项。
对于像 QScrollArea 或 QDockWidget 这样只有一个固定页面的容器,应返回 false。
- 抽象canRemove(index)#
- 参数:
index – 整型
- 返回类型:
布尔型
返回是否能删除给定
index
的小部件。这决定了是否启用删除当前页面的上下文菜单选项。对于像 QScrollArea 或 QDockWidget 这样只有一个固定页面的容器,应返回 false。
- 抽象 count()#
- 返回类型:
int
返回容器中的页面数量。
- 抽象 currentIndex()#
- 返回类型:
int
返回容器中当前选中文档的索引。
通过在扩展页面列表中的指定索引处插入给定页面,将给定页面添加到容器中。
- 抽象 remove(index)#
- 参数:
index – 整型
从扩展页面列表的给定索引处删除页面。
- 抽象 setCurrentIndex(index)#
- 参数:
index – 整型
将容器中当前选中文档设置为扩展页面列表中索引为给定值的页面。
返回扩展页面列表中给定索引处的页面。