QtCreator插件框架学习02-main入口

2021-07-11  本文已影响0人  MakerInChina

1、main主函数

1.1、QApplication对象

在main函数中首先实例化 QApplication 对象 a , QApplication 管理GUI程序的控制和设置,它是整个应用程序的唯一一个实例,其对象指针可以通过 instance() 获取到,和 qApp 宏这个全局变量等效。主要职责包括:

主义处理基本的初始化操作,因此在创建其他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;
}

一般步骤为:

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);
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;
}
上一篇下一篇

猜你喜欢

热点阅读