zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    redis(二)高级用法
    redis(一) 安装以及基本数据类型操作
    RabbitMQ(五) -- topics
    JS实时数据运算
    Access数据库中Sum函数返回空值(Null)时如何设置为0
    asp检测数字类型函数
    MVC:从客户端中检测到有潜在危险的 Request.Form 值 的解决方法
    WIN8系统安装软件时提示"扩展属性不一致"的解决方法
    免费的网络扫描器-Advanced IP Scanner
    中国电信大亚DP607光猫破解,设置路由,wifi!关闭远程管理,改连接限制,SN码查询!
  • 原文地址:https://www.cnblogs.com/findumars/p/6344584.html
Copyright © 2011-2022 走看看