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


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

    源码放在文章末尾

    该功能类似侧边工具栏,可以在该标签栏上添加自己开发的界面,实现代码如下:
    1、所有功能统一由TabBarPlugin类管理,现在主界面mainWindow插入标签栏tabBar:

     TabBarPlugin* tabBarPlugin = PluginCore::getinstance()->GetPlugin<TabBarPlugin>("TabBarPlugin");
     if (tabBarPlugin)
         ui.centralWidget->layout()->addWidget(tabBarPlugin->getWidget());
    
    • 1
    • 2
    • 3

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

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

     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());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    3、现在可以对标签栏上的所有界面进行交互
    (1)可以收缩和展开tabBar
    在这里插入图片描述

    (2)调换tabBar标签栏中所有界面的循序和删除小工具界面
    在这里插入图片描述
    (3)把tabBar标签栏中的小工具界面拖出来在放回去
    在这里插入图片描述

    源码下载

    在这里插入图片描述
  • 相关阅读:
    设计模式6——工厂方法模式实践
    Arduino ESP8266/32 自定义IO组网页状态显示与控制
    STM32内部flash闪存的总结
    互联网医院系统开发中的移动端应用设计
    C++是如何工作的
    论文解析——AMD EPYC和Ryzen处理器系列的开创性的chiplet技术和设计
    国庆day5
    3.k8s核心概念
    AJAX请求及解决跨域问题
    docker 灵活的构建 php 环境
  • 原文地址:https://blog.csdn.net/cs1395293598/article/details/134511164