QDesignerTaskMenuExtension Class Reference

[QtDesigner module]

该QDesignerTaskMenuExtension类允许您自定义菜单项添加到Qt Designer中的任务菜单。More…

通过继承QPyDesignerTaskMenuExtension

Methods

  • __init__ (self)
  • __init__ (self, QDesignerTaskMenuExtension)
  • QAction preferredEditAction (self)
  • list-of-QAction taskActions (self)

Detailed Description

该QDesignerTaskMenuExtension类允许您自定义菜单项添加到Qt Designer中的任务菜单。

QDesignerTaskMenuExtension提供了用于创建自定义任务菜单扩展的接口。它通常用于创建特定于一个插件中任务的菜单项Qt Designer

Qt Designer使用QDesignerTaskMenuExtension养活它的任务菜单。当被要求的任务菜单,Qt Designer将查询所选部件的任务菜单扩展。

QDesignerTaskMenuExtension Class Reference - 图1

任务菜单扩展是QActions的集合。当选择该插件具有指定扩展名的动作出现在任务菜单中的条目。上图显示自定义Edit State…这似乎除了动作Qt Designer的默认任务菜单项:CutCopyPaste等等

要创建一个自定义任务菜单扩展,你的扩展类必须继承自两个QObject和QDesignerTaskMenuExtension 。例如:

  1. class MyTaskMenuExtension : public [QObject]($docs-qobject.html),
  2. public QDesignerTaskMenuExtension
  3. {
  4. Q_OBJECT
  5. Q_INTERFACES(QDesignerTaskMenuExtension)
  6. public:
  7. MyTaskMenuExtension(MyCustomWidget *widget, [QObject]($docs-qobject.html) *parent);
  8. [QAction]($docs-qaction.html) *preferredEditAction() const;
  9. [QList]($docs-index.htm)<[QAction]($docs-qaction.html) *> taskActions() const;
  10. private slots:
  11. void mySlot();
  12. private:
  13. MyCustomWidget *widget;
  14. [QAction]($docs-qaction.html) *myAction;
  15. };

由于我们正在实现一个接口,我们必须确保它是使用由已知的元对象系统的Q_INTERFACES()宏。这使Qt Designer使用qobject_cast( )函数用什么来查询所支持的接口,但一QObject指针。

你必须重新实现taskActions( )函数返回的行动,将被列入名单Qt Designer任务菜单。或者,您可以重新实现preferredEditAction( )函数选择你的插件,并按下时设置被调用的行动F2。优选的编辑动作一定要返回的动作之一taskActions( ),并且如果它没有被定义时,按F2键将简单地被忽略。

In Qt Designer,则不会创建扩展,直到你需要它们。任务菜单扩展名,例如,当您单击鼠标右键,在一个小部件创建Qt Designer的工作空间。出于这个原因,你还必须构建一个扩展的工厂,无论是使用QExtensionFactory或者一个子类,并用它注册Qt Designerextension manager

当一个任务菜单扩展是必需的,Qt Designerextension manager将通过其所有已注册的工厂运行要求QExtensionFactory.createExtension()对每个直到找到一个能够创建一个任务菜单扩展所选部件。这家工厂将使这个扩展的实例。

有扩展的四个可用的类型Qt DesignerQDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtension和QDesignerTaskMenuExtension 。Qt Designer的行为是相同的同一个容器中,构件表,属性表或任务菜单所需的分机是否相关联。

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

  1. [QObject]($docs-qobject.html) *ANewExtensionFactory.createExtension([QObject]($docs-qobject.html) *object,
  2. const [QString](qstring.html) &iid, [QObject]($docs-qobject.html) *parent) const
  3. {
  4. if (iid != Q_TYPEID(QDesignerTaskMenuExtension))
  5. return 0;
  6. if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object))
  7. return new MyTaskMenuExtension(widget, parent);
  8. return 0;
  9. }

或者您可以使用现有的工厂,扩大QExtensionFactory.createExtension( )函数,使工厂能够创建一个任务菜单扩展为好。例如:

  1. [QObject]($docs-qobject.html) *AGeneralExtensionFactory.createExtension([QObject]($docs-qobject.html) *object,
  2. const [QString](qstring.html) &iid, [QObject]($docs-qobject.html) *parent) const
  3. {
  4. MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
  5. if (widget && (iid == Q_TYPEID([QDesignerContainerExtension]($docs-qdesignercontainerextension.html)))) {
  6. return new MyContainerExtension(widget, parent);
  7. } else if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
  8. return new MyTaskMenuExtension(widget, parent);
  9. } else {
  10. return 0;
  11. }
  12. }

对于使用QDesignerTaskMenuExtension类的完整示例,请参见Task Menu Extension example。该示例显示了如何创建一个自定义的widget插件Qt Designer,以及如何使用QDesignerTaskMenuExtension类的自定义项添加到Qt Designer的任务菜单。


Method Documentation

  1. QDesignerTaskMenuExtension.__init__ (self)
  1. QDesignerTaskMenuExtension.__init__ (self, QDesignerTaskMenuExtension)
  1. QAction QDesignerTaskMenuExtension.preferredEditAction (self)

[

返回具有指定扩展名选择一个插件并按下时调用的动作F2

]($docs-qaction.html)

动作一定要返回的动作之一taskActions( ) 。

  1. list-of-QAction QDesignerTaskMenuExtension.taskActions (self)

这种方法是抽象的,应在任何子类中重新实现。

返回任务菜单扩展为一个动作列表将包含在Qt Designer的任务菜单当选择具有指定扩展名的插件。

此功能必须重新实现将动作添加到列表中。