Qt Creator 中,新的工程类型将出现在“文件 -> 新建”菜单项中;我们可以通过打开的选择工程类型的对话框来找到所需要的工程:
在本章中,我们将学习如何向上面所示的对话框中添加新的工程类型。
Core::IWizard
接口
Qt Creator 提供了Core::IWizard
接口,用于实现添加新的工程类型。该接口在 src/plugins/coreplugin/dialogs/iwizard.h 中声明:
class CORE_EXPORT IWizard : public QObject { Q_OBJECT public: enum WizardKind { FileWizard = 0x01, ClassWizard = 0x02, ProjectWizard = 0x04 }; Q_DECLARE_FLAGS(WizardKinds, WizardKind) IWizard(QObject *parent = 0) : QObject(parent) {} virtual ~IWizard() {} virtual WizardKind kind() const = 0; virtual QIcon icon() const = 0; virtual QString description() const = 0; virtual QString displayName() const = 0; virtual QString id() const = 0; virtual QString category() const = 0; virtual QString displayCategory() const = 0; virtual void runWizard(const QString &path, QWidget *parent) = 0; // Utility to find all registered wizards static QList allWizards(); // Utility to find all registered wizards of a certain kind static QList wizardsOfKind(WizardKind kind); };
可以看出,Qt Creator 支持一下类型的向导:
- File
- Class
- Project
Core::IWizard
就是实现以上向导所必须实现的接口。
简单实现Core::IWizard
下面,我们自己实现IWizard
接口,来添加一个新的工程类型“Custom Project”,目的是让我们的新的工程类型能够显示在“新建工程”对话框中。
实现Core::IWizard
接口
首先,新建一个类CustomProjectWizard
,实现Core::IWizard
:
#ifndef CUSTOMPROJECTWIZARD_H #define CUSTOMPROJECTWIZARD_H #include <coreplugin/dialogs/iwizard.h> class QIcon; class QString; class QWidget; class CustomProjectWizard : public Core::IWizard { public: CustomProjectWizard() { } ~CustomProjectWizard() { } Core::IWizard::WizardKind kind() const; QIcon icon() const; QString description() const; QString displayName() const; QString id() const; QString category() const; QString displayCategory() const; void runWizard(const QString &path, QWidget *parent); }; #endif // CUSTOMPROJECTWIZARD_H
下面,我们将讨论每一个函数的实现。
函数kind()
用于告诉 Qt Creator,我们实现的IWizard
接口是哪种类型的。它的合法值就是前面所说的IWizard::WizardKind
枚举。在我们的例子中,我们返回ProjectWizard
:
Core::IWizard::WizardKind CustomProjectWizard::kind() const { return IWizard::ProjectWizard; }
函数icon()
返回一个图标,这个图标代表该工程,将会出现在新建对话框列表的左侧。在我们的例子中,我们直接返回 Qt Creator 的图标:
QIcon CustomProjectWizard::icon() const { return qApp->windowIcon(); }
函数description()
、displayName()
、category()
、displayCategory()
和id()
用于返回我们提供的新的工程类型的元数据,比如显示的名字、分类等。其中,以 display 开头的几个函数则用于在界面上显示的字符串,因此我们需要将其用tr()
函数返回。
QString CustomProjectWizard::description() const { return "A custom project"; } QString CustomProjectWizard::displayName() const { return tr("Custom Project"); } QString CustomProjectWizard::id() const { return "CustomProjectID"; } QString CustomProjectWizard::category() const { return "GalaxyWorld"; } QString CustomProjectWizard::displayCategory() const { return tr("GalaxyWorld"); }
当用户选择了“CustomProject”分类的时候,runWizard()
函数将被调用。这个函数必须显示一个对话框,或者一个QWizard
对象,用于向用户询问创建新的工程、文件或者类所必须的那些信息。在我们的示例中,这个函数仅仅显示一个对话框:
void CustomProjectWizard::runWizard(const QString &path, QWidget *parent) { Q_UNUSED(path); Q_UNUSED(parent); QMessageBox::information(parent, "Custom Wizard Dialog", "Hi there!"); }
提供插件
至此我们已经完成自定义工程所需要的代码,下面就需要和前面一样,提供一个插件的封装:
bool CustomProjectWizardPlugin::initialize(const QStringList& args, QString *errMsg) { Q_UNUSED(args); Q_UNUSED(errMsg); addAutoReleasedObject(new CustomProjectWizard); return true; }
下面运行测试一下,就可以在新建对话框中发现我们增加的 Custom Project 类型:
附件下载:CustomProjectWizardPlugin 文件
2 评论
现在版本的Qt creator (2.6.1) 貌似添加向导直接编辑一个XML
文件就可以了....
是的,新版本增加了许多功能的。