QDesignerContainerExtension 类
QDesignerContainerExtension 类允许您向 Qt 设计器 的工作空间中的自定义多页容器添加页面。 更多信息...
头文件 | #include <QDesignerContainerExtension> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake | QT += designer |
公有函数
虚拟 | ~QDesignerContainerExtension() |
虚拟 void | addWidget(QWidget *page) = 0 |
虚拟 bool | canAddWidget() const = 0 |
虚拟 bool | canRemove(int index) const = 0 |
虚拟 int | count() const = 0 |
虚拟 int | currentIndex() const = 0 |
虚拟 void | insertWidget(int index, QWidget *page) = 0 |
虚拟 void | remove(int index) = 0 |
虚拟 void | setCurrentIndex(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,QDesignerMemberSheetExtension,QDesignerPropertySheetExtension 和 QDesignerTaskMenuExtension。Qt 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 创建一个自定义的多页面插件。
另请参阅 QExtensionFactory,QExtensionManager,以及 创建自定义小部件扩展。
成员函数文档
[virtual constexpr noexcept]
QDesignerContainerExtension::~QDesignerContainerExtension
销毁扩展。
[pure virtual]
void QDesignerContainerExtension::addWidget(QWidget *page)
通过将页面附加到扩展的页面列表中,将给定的 page 添加到容器中。
另请参阅 insertWidget(),remove(),和 widget()。
[pure virtual]
bool QDesignerContainerExtension::canAddWidget() const
返回是否可以添加小部件。这决定了添加或插入页面的上下文菜单选项是否启用。
对于只有一个固定页面的容器,例如QScrollArea或QDockWidget,该函数应返回false。
[纯虚函数]
bool QDesignerContainerExtension::canRemove(int index) const
返回给定index处的窗口是否可以被删除。这决定了移除当前页面的上下文菜单选项是否启用。
对于只有一个固定页面的容器,例如QScrollArea或QDockWidget,该函数应返回false。
另请参阅remove()和canAddWidget。
[纯虚函数]
int QDesignerContainerExtension::count() const
返回容器中的页面数。
[纯虚函数]
int QDesignerContainerExtension::currentIndex() const
返回容器当前选中的页面的索引。
另请参阅setCurrentIndex。
[纯虚函数]
void QDesignerContainerExtension::insertWidget(int index, QWidget *page)
通过在扩展页面的列表中插入给定index处的页面来将指定的page添加到容器中。
[纯虚函数]
void QDesignerContainerExtension::remove(int index)
从扩展页面列表中移除给定index处的页面。
另请参阅addWidget和insertWidget。
[纯虚函数]
void QDesignerContainerExtension::setCurrentIndex(int index)
将容器中当前选中的页面设置为扩展页面列表给定index处的页面。
另请参阅currentIndex。
[纯虚函数]
QWidget *QDesignerContainerExtension::widget(int index) const
返回扩展页面列表给定index处的页面。
另请参阅addWidget和insertWidget。
© 2024 Qt公司有限公司。本文档中的贡献版权属于各自的所有者。本文档根据自由软件基金会发布的GNU自由文档许可证1.3版许可。Qt及其相关标志是芬兰和/或其他国家的Qt公司有限公司的注册商标。所有其他商标均为各自所有者的财产。