QDesignerContainerExtension 类

QDesignerContainerExtension 类允许您向 Qt 设计器 的工作空间中的自定义多页容器添加页面。 更多信息...

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

公有函数

虚拟~QDesignerContainerExtension()
虚拟 voidaddWidget(QWidget *page) = 0
虚拟 boolcanAddWidget() const = 0
虚拟 boolcanRemove(int index) const = 0
虚拟 intcount() const = 0
虚拟 intcurrentIndex() const = 0
虚拟 voidinsertWidget(int index, QWidget *page) = 0
虚拟 voidremove(int index) = 0
虚拟 voidsetCurrentIndex(int index) = 0
虚拟 QWidget *widget(int index) const = 0

详细描述

QDesignerContainerExtension 提供了一个用于创建自定义容器扩展的接口。容器扩展由一系列 Qt 设计器 需要管理多页容器插件的功能集合和容器的页面列表组成。

注意:不仅 是针对容器插件的扩展,仅限自定义的多页容器。

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

class MyContainerExtension : public QObject,
       public QDesignerContainerExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerContainerExtension)

public:
    MyContainerExtension(MyCustomWidget *widget,
                         QObject *parent = 0);
    int count() const;
    QWidget *widget(int index) const;
    int currentIndex() const;
    void setCurrentIndex(int index);
    void addWidget(QWidget *widget);
    void insertWidget(int index, QWidget *widget);
    void remove(int index);

private:
    MyCustomWidget *myWidget;
};

由于我们正在实现接口,我们必须确保使用 Q_INTERFACES() 宏使其对元对象系统可见。这使 Qt 设计器 能够使用 qobject_cast() 函数,通过一个 QObject 指针来查询所支持接口。

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

Qt Designer 中,扩展仅在其被需要时才创建。因此,您还必须创建一个 QExtensionFactory,即一个能够创建您的扩展实例的类,并使用 Qt Designer扩展管理器 进行注册。

当需要容器扩展时,Qt Designer扩展管理器 将运行其所有已注册的工厂,并对每个工厂调用 QExtensionFactory::createExtension(),直到找到第一个能够创建容器扩展的工厂。然后此工厂将为插件创建扩展。

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

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

QObject *ANewExtensionFactory::createExtension(QObject *object,
        const QString &iid, QObject *parent) const
{
    if (iid != Q_TYPEID(QDesignerContainerExtension))
        return 0;

    if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
           (object))
        return new MyContainerExtension(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(QDesignerTaskMenuExtension))) {
        return new MyTaskMenuExtension(widget, parent);

    } else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
        return new MyContainerExtension(widget, parent);

    } else {
        return 0;
    }
}

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

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

成员函数文档

[virtual constexpr noexcept] QDesignerContainerExtension::~QDesignerContainerExtension

销毁扩展。

[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)

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

另请参阅 insertWidget(),remove(),和 widget()。

[pure virtual] bool QDesignerContainerExtension::canAddWidget() const

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

对于只有一个固定页面的容器,例如QScrollAreaQDockWidget,该函数应返回false。

另请参阅addWidget()和canRemove

[纯虚函数] bool QDesignerContainerExtension::canRemove(int index) const

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

对于只有一个固定页面的容器,例如QScrollAreaQDockWidget,该函数应返回false。

另请参阅remove()和canAddWidget

[纯虚函数] int QDesignerContainerExtension::count() const

返回容器中的页面数。

[纯虚函数] int QDesignerContainerExtension::currentIndex() const

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

另请参阅setCurrentIndex

[纯虚函数] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)

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

另请参阅addWidgetremovewidget

[纯虚函数] void QDesignerContainerExtension::remove(int index)

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

另请参阅addWidgetinsertWidget

[纯虚函数] void QDesignerContainerExtension::setCurrentIndex(int index)

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

另请参阅currentIndex

[纯虚函数] QWidget *QDesignerContainerExtension::widget(int index) const

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

另请参阅addWidgetinsertWidget

© 2024 Qt公司有限公司。本文档中的贡献版权属于各自的所有者。本文档根据自由软件基金会发布的GNU自由文档许可证1.3版许可。Qt及其相关标志是芬兰和/或其他国家的Qt公司有限公司的注册商标。所有其他商标均为各自所有者的财产。