美文网首页
QtCreator插件框架学习02-main入口

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

作者: MakerInChina | 来源:发表于2021-07-11 21:26 被阅读0次

    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 的插件;
    • 执行插件,这里是显示主界面;
    • 如果没有找到则退出;

    相关文章

      网友评论

          本文标题:QtCreator插件框架学习02-main入口

          本文链接:https://www.haomeiwen.com/subject/fsllpltx.html