在QtCreator主程序中特别对核心插件,命名为Core的插件,进行了检查。核心插件也是QtCreator的主界面和入口,下面对核心插件进行分析。
1、插件接口类
插件接口类至少需要实现initialize和extensionsInitialized两个函数,两个函数分别在插件初始化和运行时调用。两个接口函数在核心插件中的实现
bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage) { Q_UNUSED(arguments) const bool success = m_mainWindow->init(errorMessage); //启动主窗口 if (success) { EditorManager *editorManager = m_mainWindow->editorManager(); m_editMode = new EditMode(editorManager); addObject(m_editMode); //在插件管理器中添加编辑模型对象 } return success; }
void CorePlugin::extensionsInitialized()
{
m_mainWindow->extensionsInitialized();
}
核心插件接口类对于参数的解析
void CorePlugin::remoteArgument(const QString& arg) { if (arg.isEmpty()) { m_mainWindow->activateWindow(); } else { m_mainWindow->openFiles(QStringList(arg)); } }
可以看出核心插件的主要类是主窗口类。
2、主窗口类 MainWindow
从代码里可以看到,主窗口类作为主界面类,拥有较多的成员函数和操作。我从插件接口类对主窗口类的操作次序依次分析相关的操作过程。
2.1、主窗口类的生成
首先在类的实例初始化操作中是一些设置和固定成员的初始化;然后再生成函数中进行了一些主界面配置。
这里主要分析下主界面中包含哪些对象元素。
- 相关管理类
ActionManagerPrivate *m_actionManager;
EditorManager *m_editorManager;
FileManager *m_fileManager;
MessageManager *m_messageManager;
ProgressManagerPrivate *m_progressManager;
ScriptManager *m_scriptManager;
VariableManager *m_variableManager;
VCSManager *m_vcsManager;
ViewManager *m_viewManager;
ModeManager *m_modeManager;
MimeDatabase *m_mimeDatabase;
- 相关UI类
FancyTabWidget *m_modeStack; NavigationWidget*m_navigationWidget; RightPaneWidget *m_rightPaneWidget; Core::BaseView *m_outputView; VersionDialog *m_versionDialog;
2.2、插件初始化调用的主窗口初始化 init
bool MainWindow::init(QString *errorMessage) { Q_UNUSED(errorMessage) ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); pm->addObject(m_coreImpl); m_viewManager->init(); //视图管理器初始化 m_modeManager->init(); //模型管理器初始化 m_progressManager->init();//过程管理器初始化 //以下是输出窗口的一些操作 ...... }
可以看出初始化操作主要是对三个管理器进行初始化