zoukankan      html  css  js  c++  java
  • 手把手教Qt Creator插件开发-QT运行计时器

    手把手教Qt Creator插件-QT运行计时器

    QT Creator是QT官方的C++开发IDE,灵活的插件框架,助你方便的拓展想要的功能。本例环境:
    qt-creator 版本 : qt-creator-opensource-src-4.3.1

    QT库 :Qt5.9.1/5.9.1/

    编译器:mingw53_32

    功能需求:

    1. 保存用户Setting

    2. 实现Core::IOptionsPage,加到OptionPage(Tools->Option),

    实现 Core::ActionManager::createMenu,加到Tools菜单项中,

    3. 实现QWidget,放置具体的设置页,实现交互的GUI

     插件生存期:QT插件具有良好的启动和关闭生存期,当应用启动,所有的插件按照依赖加载到队列中(依赖于哪些插件)。然后,开启每一个插件第一阶段的初始化流程

    • 按照queue中顺序,调用Plugin构造函数
    • 按照queue中顺序,调用Initialize()- 被依赖的插件应先初始化
    • 按照相反的顺序,调用extensionsInitialized() – 这样可以访问已初始化的依赖的那些插件
    • Core::ICore发送coreAboutToOpen()信号

    经过上面过程,QT Creator UI就显示在界面上了。接着第二部分初始化流程开始

    • Core::ICore发送coreOpened()信号
    • 按照相反的顺序,调用delayedInitialize(),初始化都间隔一定的时间,这种不重要的初始化可以减少QT Creator的加载时间
    • PluginManager 发送initializationDone()信号

     经过以上步骤,插件完成初始化。关闭应用有相似的处理过程。

    • Core::ICore发送coreAboutToClose()信号
    • 按照queue中顺序调用aboutToShutdown()

             - 返回SynchronousShutdown通知终止

             - 返回AsynchronousShutdown让Creator等待直到发送asynchronousShutdownFinished()信号

    • ~Plugin()按照queue逆序析构

     简单的例子:

     1. 环境配置

    下载 库Qt5.9.1

    下载qt-creator源码:qt-creator-opensource-src-4.3.1

    在qt-creator同级目录下新建build文件夹,存放qt-creator源码编译结果

    打开QT命令行环境,输入如下命令,在bin目录下得到编译后的QtCreator可执行文件

    qmake ../qt-creator-opensource-src-4.3.1/qtcreator.pro  -spec win32-g++ "CONFIG+=debug" "QT_PRIVATE_HEADERS=C:/Qt/Qt5.9.1/5.9.1/mingw53_32/include"

    mingw32-make -debug

    note: 如果按照debug方式编译出的执行档,插件得相应选择debug方式编译。因为插件编译使用的库文件,依赖于相应方式release/debug编译出的dll文件。否则,将无法通过编译。

    2. 创建插件工程

     

       

    qtctimer.pro – qmake 工程文件

    qtctimerplugin.h/.cpp – 插件类文件

                QtCTimer.json.in – 存储插件信息

    如果想在Windows下看debug log 信息:设置QT_DEBUG_PLUGINS = 1  并打开dbgview64监控

    工程中设置编译环境如下:

    插件代码实现:

    插件类-头文件

    插件类-实现文件

    设置类-头文件

    设置类-实现文件

    选项页-头文件

    选项页-实现文件

     https://www.devbean.net/2011/10/qtcreator-plugin-develop-6/

    摘自剖析架构

     “如果一个插件有实现了这样的接口的对象,那么这个对象就应该被暴露出来。例如,一个插件中的某个类实现了INavigationWidgetFactory接口,并且暴露出来,那么 Core 就会自动把这个类提供的组件当做导航组件显示出来”

    注意,在initialize()函数中,我们创建了一个INavigationWidgetFactory实现的实例,然后将其添加到对象池中。一旦对象被添加到对象池,ExtensionSystem::PluginManager就会发出objectAdded()信号;该信号由 Qt Creator 核心监听。一旦核心获得这个信号,它就会利用我们提供的INavigationWidgetFactory接口的实现,将其添加到导航器面板。

     

  • 相关阅读:
    window10+python3.7安装tensorflow--gpu tensorflow 安装
    解决plsql中文显示问号(???)问题
    卷积神经网络通俗解读
    NLP进阶之(七)膨胀卷积神经网络
    如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别?
    【Learning Notes】线性链条件随机场(CRF)原理及实现
    【机器学习】【条件随机场CRF-2】CRF的预测算法之维特比算法(viterbi alg) 详解 + 示例讲解 + Python实现
    条件随机场(CRF)
    条件随机场(CRF)
    条件随机场(CRF)
  • 原文地址:https://www.cnblogs.com/7star/p/13958309.html
Copyright © 2011-2022 走看看