2.1K 预定义的
预定义的IWizard
实现:Core::BaseFileWizard
Qt Creator 已经提供了一个默认的IWizard
接口的实现,也就是Core::BaseFileWizard
类。这个类提供了IWizard
接口的所有函数的默认实现,并且增加了自己特有的虚函数。为了利用这个类,我们需要继承它,并且重写其中的一个或多个函数。
Core::GeneratedFile
和Core::GeneratedFiles
通常说,一个新的向导(IWizard
的实现)能够提供用户多种提示,并且最终生成一个或者多个文件。Core::GeneratedFile
类帮助我们对将要生成的文件进行抽象。很快,我们就可以了解到,在Core::BaseFileWizard
的子类中,我们可以为每一个自动生成的文件创建Core::GeneratedFile
类的实例。Core::GeneratedFile
在 coreplugin/basefilewizard.h 中声明:
class CORE_EXPORT GeneratedFile { public: enum Attribute { // Open this file in editor OpenEditorAttribute = 0x01, // Open project OpenProjectAttribute = 0x02, /* File is generated by external scripts, do not write out, * see BaseFileWizard::writeFiles() */ CustomGeneratorAttribute = 0x4 }; Q_DECLARE_FLAGS(Attributes, Attribute) GeneratedFile(); explicit GeneratedFile(const QString &path); GeneratedFile(const GeneratedFile &); GeneratedFile &operator=(const GeneratedFile &); ~GeneratedFile(); // Full path of the file should be created, or the suggested file name QString path() const; void setPath(const QString &p); // Contents of the file (UTF8) QString contents() const; void setContents(const QString &c); QByteArray binaryContents() const; void setBinaryContents(const QByteArray &c); // Defaults to false (Text file). bool isBinary() const; void setBinary(bool b); // Id of editor to open the file with QString editorId() const; void setEditorId(const QString &k); bool write(QString *errorMessage) const; Attributes attributes() const; void setAttributes(Attributes a); private: QSharedDataPointer m_d; }; typedef QList GeneratedFiles;
需要由Core::BaseFileWizard
子类生成的文件由Core::GeneratedFile
类对象表示。这个类包含了需要生成的文件的三个关键属性:
- 文件名(及绝对路径)
- 用于编辑文件所需要的编辑器类型,合法值为:
CppEditor::Constants::CPPEDITOR_KIND
GenericProjectManager::Constants::PROJECT_KIND
Git::Constants:: GIT_COMMAND_LOG_EDITOR_KIND
Git::Constants:: C_GIT_COMMAND_LOG_EDITOR
- 文件内容
假设我们需要生成如下内容的 C++ 文件:
#include <iostream> int main() { cout << "Hello World\n"; return 0; }
我们按照下述代码使用Core::GeneratedFile
:
#include <coreplugin/basefilewizard.h> #include <cppeditor/cppeditorconstants.h> Core::GeneratedFile genFile("C:/Path/To/Source.cpp"); genFile.setEditorId(CppEditor::Constants::CPPEDITOR_ID); genFile.setContents( "#include <iostream>\n" "\n" "int main()\n" "{\n" " cout << \"Hello World\n\";\n" " \n" " return 0;\n" "}" ); genFile.write(NULL);