手把手教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接口的实现,将其添加到导航器面板。