手把手教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逆序析构

 简单的例子:

 

 

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

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

 

 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. 创建插件工程

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

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

qtctimer.pro – qmake 工程文件

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

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

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

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

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

插件代码实现:

插件类-头文件

插件类-实现文件

设置类-头文件

设置类-实现文件

选项页-头文件

选项页-实现文件

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

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

摘自剖析架构

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

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

 

 

 

上一篇:01.Qt Creator设置


下一篇:一文告诉你市面上最火的游戏都是用什么引擎做的!!!