1、main主函数
1.1、QApplication对象
在main函数中首先实例化 QApplication 对象 a , QApplication 管理GUI程序的控制和设置,它是整个应用程序的唯一一个实例,其对象指针可以通过 instance() 获取到,和 qApp 宏这个全局变量等效。主要职责包括:
- 用户桌面设置;
- 事件处理;
- 命令行参数处理;
- GUI外观定义;
- 本地化如语言设置;
主义处理基本的初始化操作,因此在创建其他UI对象之前必须先创建QApplication对象。
1.2、main函数主要步骤
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc,argv);
a.setApplicationName("appName");
a.setApplicationDisplayName("appDisname");
a.setDesktopFileName("deskName");
a.setApplicationVersion("0.01");
a.setOrganizationDomain("com.makerinchina.cn");
a.setOrganizationName("makerinchina");
//plugin mange
//coreplugin
int ret = a.exec();
return ret;
}
一般步骤为:
- 创建QApplication对象;
- 设置字体、本地化语言;
- 这是QSS定义的UI元素外观;
- 程序启动动画创建;
- 设置程序名称、版本等信息;
- 插件框架处理;
- 执行 a.exec() 进入事件循环,一般等窗口关闭后才会返回;
2、插件加载
2.1、插件框架
插件框架处理步骤如下:
using namespace ExtensionSystem;
//plugin mange
PluginManager pluginManger;
//plugin IID, only Plugins with this IID are loaded
PluginManager::setPluginIID(QLatin1String("monkeyqdk.qtc.plugin"));
//plugin path
QStringList pluginPath;
pluginPath<<a.applicationDirPath()+"/plugins";
qDebug()<<"plugin path:"<<a.applicationDirPath()+"/plugins";
pluginManger.setPluginPaths(pluginPath);
//load
pluginManger.loadPlugins();
//shutdown when app exit
QObject::connect(&a,&QApplication::aboutToQuit,&pluginManger,&PluginManager::shutdown);
- 实例化 PluginManger 对象;
- 设置插件IID 和 插件的路径;
- 使用loadPlugins() 加载插件;
- 在app程序退出时候也关闭PluginManger
2.2、核心插件加载
//coreplugin
const QVector<PluginSpec*> plugins = pluginManger.plugins();
PluginSpec *corespec = nullptr;
//find corespec
qDebug()<<__FILE__<<" at line "<<__LINE__<<" :"<<"find core plugin";
for(PluginSpec* spec: plugins){
qDebug()<<__FILE__<<" at line "<<__LINE__<<" :"<<"spec for plugin name "<<spec->name();
if(spec->name() == QLatin1String("CorePlugin")){
corespec = spec;
break;
}
}
//load coreplugin
if(corespec){
corespec->plugin()->remoteCommand(QStringList(),QString(),QStringList());
}else{
//not found core plugin
qDebug()<<__FILE__<<" at line "<<__LINE__<<" :"<<"no corePlugin found,exit.";
pluginManger.shutdown();
a.quit();
return -1;
}
- 遍历插件,然后通过插件描述pluginspec找到名字为 CorePlugin 的插件;
- 执行插件,这里是显示主界面;
- 如果没有找到则退出;
网友评论