《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar

tabBar是用QT插件实现的一个dll,对于插件的使用可以参考文章:
《QT从基础到进阶·三十三》QT插件开发QtPlugin

源码放在文章末尾

该功能类似侧边工具栏,可以在该标签栏上添加自己开发的界面,实现代码如下:

1、所有功能统一由TabBarPlugin类管理,现在主界面mainWindow插入标签栏tabBar:

cpp 复制代码
 TabBarPlugin* tabBarPlugin = PluginCore::getinstance()->GetPlugin<TabBarPlugin>("TabBarPlugin");
 if (tabBarPlugin)
     ui.centralWidget->layout()->addWidget(tabBarPlugin->getWidget());

注意:后面PluginCore::getinstance()->GetPlugin("TabBarPlugin");内部先拿到TabBar的dll转为QObject,再把QObject强转为TabBarPlugin对象,这是插件的使用方法,也可以直接new一个TabBarPlugin对象。

2、现在有四个小工具界面想要放入tabBar标签栏:

cpp 复制代码
 LevelAdjustPlugin* levelAdjustPlugin = PluginCore::getinstance()->GetPlugin<LevelAdjustPlugin>("LevelAdjustPlugin");
    if (levelAdjustPlugin && tabBarPlugin)
        tabBarPlugin->addWidget(levelAdjustPlugin->GetWidget(), "LevelAdjust", QIcon());

    MLMotion2D* tipTiltPlugin = PluginCore::getinstance()->GetPlugin<MLMotion2D>("TipTiltPlugin");
    if (tipTiltPlugin && tabBarPlugin)
        tabBarPlugin->addWidget(tipTiltPlugin->GetWidget(), "TipTilt", QIcon());

    CollimatorPlugin* collPlugin = PluginCore::getinstance()->GetPlugin<CollimatorPlugin>("CollimatorPlugin");
    if (collPlugin && tabBarPlugin)
        tabBarPlugin->addWidget(collPlugin->GetWidget(), "Collimator", QIcon());

    GradienterPlugin* gradPlugin = PluginCore::getinstance()->GetPlugin<GradienterPlugin>("GradienterPlugin");
    if (gradPlugin && tabBarPlugin)
        tabBarPlugin->addWidget(gradPlugin->GetWidget(), "Gradienter", QIcon());

四个小工具也是由插件实现,先拿到他们的对象,通过对象指针获取他们的界面,再把每个界面addWidget添加到标签栏中。

3、现在可以对标签栏上的所有界面进行交互

(1)可以收缩和展开tabBar

(2)调换tabBar标签栏中所有界面的循序和删除小工具界面

(3)把tabBar标签栏中的小工具界面拖出来在放回去

源码下载

相关推荐
傻啦嘿哟27 分钟前
Python 办公实战:用 python-docx 自动生成 Word 文档
开发语言·c#
翻滚吧键盘31 分钟前
js代码09
开发语言·javascript·ecmascript
q5673152337 分钟前
R语言初学者爬虫简单模板
开发语言·爬虫·r语言·iphone
??tobenewyorker1 小时前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
rzl021 小时前
java web5(黑马)
java·开发语言·前端
时序数据说1 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
jingling5552 小时前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
oioihoii2 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
m0_687399842 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
Natsume17102 小时前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github