QtCreator源码分析—2.启动主程序

来源:互联网 发布:造价工程师有软件吗 编辑:程序博客网 时间:2024/05/18 08:27

QtCreator采用插件体系结构。主程序启动插件管理器(PluginManager),再通过插件管理器加载其插件,QtCreator的所有功能均使用插件实现。

 

我们先来分析主程序对插件管理器的主要操作:

int main(int argc, char **argv){......ExtensionSystem::PluginManager pluginManager;//生成插件管理器实例pluginManager.setFileExtension(QLatin1String("pluginspec"));//设置插件配置文件类型,默认xml        pluginManager.setPluginPaths(pluginPaths);//设置插件所在目录
......//对参数操作//让插件管理器解析启动参数if (!pluginManager.parseOptions(arguments,                                        appOptions,                                        &foundAppOptions,                                        &errorMessage)){}......//找到核心插件(由corePluginNameC定义其名字)const PluginSpecSet plugins = pluginManager.plugins();    ExtensionSystem::PluginSpec *coreplugin = 0;    foreach (ExtensionSystem::PluginSpec *spec, plugins) {if (spec->name() == QLatin1String(corePluginNameC)) {            coreplugin = spec;            break;        }    }//对核心插件进行一些检查......//载入插件pluginManager.loadPlugins();//一些错误处理......if (isFirstInstance) {        app.initialize();//将主程序运行过程中得到的消息传递给核心插件        QObject::connect(&app, SIGNAL(messageReceived(QString)), coreplugin->plugin(), SLOT(remoteArgument(QString)));   }//将主程序的打开文件请求消息传递给核心插件   QObject::connect(&app, SIGNAL(fileOpenRequest(QString)), coreplugin->plugin(), SLOT(remoteArgument(QString)));//建立消息循环QTimer::singleShot(100, &pluginManager, SLOT(startTests()));    return app.exec();}

从上面的过程,可以看出一共对插件管理器做了5件事情,依次为

1、插件管理器先设置了一些环境变量,比如插件配置文件类型、所在目录等

2、将启动参数交给插件管理器解析

3、对核心插件(特定命名的插件)进行检查

4、加载插件

6、将主程序的消息和核心插件的remoteArgument槽对接

原创粉丝点击