首页 > 代码库 > QtCreator源码分析—2.启动主程序(4篇)

QtCreator源码分析—2.启动主程序(4篇)

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槽对接

 

http://blog.csdn.net/superzhaifd/article/details/16114547

QtCreator源码分析—2.启动主程序(4篇)