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将查询所选部件的任务菜单扩展。
任务菜单扩展是QActions的集合。当选择该插件具有指定扩展名的动作出现在任务菜单中的条目。上图显示自定义Edit State…这似乎除了动作Qt Designer的默认任务菜单项:Cut,Copy,Paste等等
要创建一个自定义任务菜单扩展,你的扩展类必须继承自两个QObject和QDesignerTaskMenuExtension 。例如:
class MyTaskMenuExtension : public [QObject]($docs-qobject.html),
public QDesignerTaskMenuExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerTaskMenuExtension)
public:
MyTaskMenuExtension(MyCustomWidget *widget, [QObject]($docs-qobject.html) *parent);
[QAction]($docs-qaction.html) *preferredEditAction() const;
[QList]($docs-index.htm)<[QAction]($docs-qaction.html) *> taskActions() const;
private slots:
void mySlot();
private:
MyCustomWidget *widget;
[QAction]($docs-qaction.html) *myAction;
};
由于我们正在实现一个接口,我们必须确保它是使用由已知的元对象系统的Q_INTERFACES()宏。这使Qt Designer使用qobject_cast( )函数用什么来查询所支持的接口,但一QObject指针。
你必须重新实现taskActions( )函数返回的行动,将被列入名单Qt Designer任务菜单。或者,您可以重新实现preferredEditAction( )函数选择你的插件,并按下时设置被调用的行动F2。优选的编辑动作一定要返回的动作之一taskActions( ),并且如果它没有被定义时,按F2键将简单地被忽略。
In Qt Designer,则不会创建扩展,直到你需要它们。任务菜单扩展名,例如,当您单击鼠标右键,在一个小部件创建Qt Designer的工作空间。出于这个原因,你还必须构建一个扩展的工厂,无论是使用QExtensionFactory或者一个子类,并用它注册Qt Designer的extension manager。
当一个任务菜单扩展是必需的,Qt Designer的extension manager将通过其所有已注册的工厂运行要求QExtensionFactory.createExtension()对每个直到找到一个能够创建一个任务菜单扩展所选部件。这家工厂将使这个扩展的实例。
有扩展的四个可用的类型Qt Designer:QDesignerContainerExtension,QDesignerMemberSheetExtension,QDesignerPropertySheetExtension和QDesignerTaskMenuExtension 。Qt Designer的行为是相同的同一个容器中,构件表,属性表或任务菜单所需的分机是否相关联。
该QExtensionFactory类提供了一个标准的扩展工厂,并且也可以用作用于定义扩展工厂的接口。您可以创建一个新的QExtensionFactory并重新实现QExtensionFactory.createExtension()函数。例如:
[QObject]($docs-qobject.html) *ANewExtensionFactory.createExtension([QObject]($docs-qobject.html) *object,
const [QString](qstring.html) &iid, [QObject]($docs-qobject.html) *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]($docs-qobject.html) *AGeneralExtensionFactory.createExtension([QObject]($docs-qobject.html) *object,
const [QString](qstring.html) &iid, [QObject]($docs-qobject.html) *parent) const
{
MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
if (widget && (iid == Q_TYPEID([QDesignerContainerExtension]($docs-qdesignercontainerextension.html)))) {
return new MyContainerExtension(widget, parent);
} else if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
return new MyTaskMenuExtension(widget, parent);
} else {
return 0;
}
}
对于使用QDesignerTaskMenuExtension类的完整示例,请参见Task Menu Extension example。该示例显示了如何创建一个自定义的widget插件Qt Designer,以及如何使用QDesignerTaskMenuExtension类的自定义项添加到Qt Designer的任务菜单。
Method Documentation
QDesignerTaskMenuExtension.__init__ (self)
QDesignerTaskMenuExtension.__init__ (self, QDesignerTaskMenuExtension)
QAction QDesignerTaskMenuExtension.preferredEditAction (self)
[
返回具有指定扩展名选择一个插件并按下时调用的动作F2。
]($docs-qaction.html)
list-of-QAction QDesignerTaskMenuExtension.taskActions (self)
这种方法是抽象的,应在任何子类中重新实现。
返回任务菜单扩展为一个动作列表将包含在Qt Designer的任务菜单当选择具有指定扩展名的插件。
此功能必须重新实现将动作添加到列表中。