QtCreator源码分析—4.核心插件
来源:互联网 发布:mac怎么创建文件夹 编辑:程序博客网 时间:2024/06/05 09:12
在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();//过程管理器初始化 //以下是输出窗口的一些操作 ......}
可以看出初始化操作主要是对三个管理器进行初始化
- QtCreator源码分析—4.核心插件
- QtCreator源码分析 -3.插件管理系统
- QtCreator源码分析—1.结构图
- QtCreator源码分析—2.启动主程序
- Android热修复 — Nuwa Gradle 插件核心源码分析
- 源码分析——核心机制
- C++实现自己的插件框架 基于QtCreator源码裁剪
- struts2核心流程源码分析
- Volley框架核心源码分析
- struts2源码分析--核心机制
- jquery源码分析插件
- java核心之集合框架——HashMap源码分析
- java核心之集合框架——ArrayList源码分析
- Spring 源码分析(二) —— 核心容器
- ExtJs源码分析与学习—ExtJs核心代码扩展
- discuzx源码分析—-class_core.php 核心类
- discuz 插件核心函数hookscript分析.
- netty源码分析之-服务端启动核心源码分析(5)
- 用十年来学编程
- 每日一算法:打印一个菱形
- String 转 Json,应用jar包com.google.gson
- Python自学1:Python 基本数据结构:列表、元组、字典
- Android高手进阶教程(十)之----Android PopupWindow的使用!
- QtCreator源码分析—4.核心插件
- 二叉树先序,中序,后序遍历非递归实现
- 多种设计模式文章(备忘,有空多阅读)
- 算法习题63:字符串删除特定字符
- 数组中随机选择n个数
- 经典Peterson算法解决互斥锁的并发的Java实现
- NYOJ 325zb的生日
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!
- Linux/Unix下去除windows下换行符^M