QDesignerTaskMenuExtension 类
QDesignerTaskMenuExtension 类允许您为 Qt Designer 的任务菜单添加自定义菜单项。 更多...
头文件 | #include <QDesignerTaskMenuExtension> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
qmake | QT += designer |
公用函数
virtual | ~QDesignerTaskMenuExtension() |
virtual QAction * | preferredEditAction() const |
virtual QList<QAction *> | taskActions() const = 0 |
详细描述
QDesignerTaskMenuExtension 提供了一个创建自定义任务菜单扩展的接口。通常用于在 Qt Designer 中创建特定于插件的任务菜单项。
Qt Designer 使用 QDesignerTaskMenuExtension 来填充其任务菜单。每当请求任务菜单时,Qt Designer 都会查询所选小部件的任务菜单扩展。
任务菜单扩展是一系列 QActions。当选择具有指定扩展的插件时,这些动作将作为任务菜单中的条目出现。上面的图片显示了除 Qt Designer 的默认任务菜单项(剪切、复制、粘贴 等)外还出现的自定义 编辑状态... 动作。
要创建自定义任务菜单扩展,您的扩展类必须从 QObject 和 QDesignerTaskMenuExtension 继承。例如
class MyTaskMenuExtension : public QObject, public QDesignerTaskMenuExtension { Q_OBJECT Q_INTERFACES(QDesignerTaskMenuExtension) public: MyTaskMenuExtension(MyCustomWidget *widget, QObject *parent); QAction *preferredEditAction() const; QList<QAction *> taskActions() const; private slots: void mySlot(); private: MyCustomWidget *widget; QAction *myAction; };
由于我们正在实现接口,我们必须通过使用 Q_INTERFACES() 宏来确保它通过元对象系统使用。这允许 Qt Designer 使用 qobject_cast() 函数使用一个 QObject 指针来查询支持的接口。
您必须实现 taskActions() 函数来返回要包含在 Qt Designer 任务菜单中的动作列表。可选地,您可以重写 preferredEditAction() 函数来设置在选择您的插件并按 F2 时调用的动作。首选编辑动作必须是 taskActions() 返回的动作之一,如果未定义,则按 F2 键将简单地被忽略。
在 Qt Designer 中,扩展仅在需要时才创建。例如,任务菜单扩展是在您在 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(QDesignerTaskMenuExtension)) return 0; if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object)) return new MyTaskMenuExtension(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(QDesignerContainerExtension))) { return new MyContainerExtension(widget, parent); } else if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) { return new MyTaskMenuExtension(widget, parent); } else { return 0; } }
有关使用 QDesignerTaskMenuExtension 类 的完整示例,请参阅“任务菜单扩展示例”。该示例展示了如何为 Qt Designer 创建自定义小部件插件,以及如何使用 QDesignerTaskMenuExtension 类向 Qt Designer 的任务菜单添加自定义项。
另请参阅 QExtensionFactory、QExtensionManager 和 创建自定义小部件扩展。
成员函数文档
[虚函数 noexcept]
QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension()
销毁任务菜单扩展。
[虚函数]
QAction *QDesignerTaskMenuExtension::preferredEditAction() const
返回在选中具有指定扩展的插件并按 F2 键时触发的操作。
该动作必须是 taskActions() 返回的动作之一。
[纯虚函数]
QList<QAction *> QDesignerTaskMenuExtension::taskActions() const
返回任务菜单扩展作为动作列表,当选中具有指定扩展的插件时,这些动作将包含在 Qt Designer 的任务菜单中。
必须重新实现此函数以添加动作到列表中。
版权所有 2024 QtCompany Ltd。本文档中包含的文档贡献是各自所有者的版权。本文档提供的内容受 GNU 自由文档许可版 1.3 的许可,由自由软件开发基金会发布。Qt 和相关标志是芬兰的 Qt 公司以及全球其他国家的商标。所有其他商标均为其各自所有器的财产。