《QT从基础到进阶·三十七》QWidget实现左侧导航栏效果

NavigationBarPlugin插件类实现了对左侧导航栏的管理,我们可以在导航栏插件中添加界面,并用鼠标点击导航栏能够切换对应的界面。

源码在文章末尾

实现效果如下:
在这里插入图片描述

NavigationBarPlugin实现的接口如下:

class NAVIGATIONBAR_EXPORT NavigationBarPlugin
{
public:
    virtual ~NavigationBarPlugin() {}

	//设置父窗口和在父窗口上面的布局
    virtual void SetParent(QWidget* parent, QLayout* layout) = 0; //Incoming parent interface and layout in parent interface
    //为导航栏添加标题和图标
    virtual void addMainMenu(QString title, QIcon icon) = 0;
    //在对应的导航栏位置添加界面
    virtual void addMenuWidget(QString widgetTitle, int mainMenuIndex, QWidget* widget) = 0;
    //获取导航栏插件界面
    virtual QWidget* GetWidget() = 0; //Return to the left navigation bar widget
    //刷新导航栏显示
    virtual void hideAndRefresh() = 0; //Refresh navigation bar display
};

使用方法:
1、创建导航栏对象
NavigationBarPlugin.dll可以通过QPlugin插件的形式加载进来成一个QObject指针,再把QObject强转为NavigationBarPlugin对象,如下:

NavigationBarPlugin* LeftNavigationBarPlugin = qobject_cast<NavigationBarPlugin*>(plugin);

插件的使用可以看之前的文章:《QT从基础到进阶·三十三》QT插件开发QtPlugin
也可以直接new一个NavigationBarPlugin对象。

2、在主界面设置导航栏和布局

 ui.centralWidget->layout()->addWidget(LeftNavigationBarPlugin->GetWidget());
 ui.centralWidget->layout()->addItem(m_centerQVBoxLayout);

我们先把导航栏框架添加添加到主界面的左边,然后在主界面右边设置一个布局用于后面显示界面
在这里插入图片描述

在这里插入图片描述

3、在导航栏添加标签按钮并设置按钮标签对应的显示界面

 LeftNavigationBarPlugin->SetParent(ui.centralWidget, m_centerQVBoxLayout);

 LeftNavigationBarPlugin->addMainMenu("MTFMeasure", QIcon(":/Gen2WGMTFTester/images/MTF/MTF.png"));
if (mtfMeasurePlugin)
   LeftNavigationBarPlugin->addMenuWidget("MTF", 0, mtfMeasurePlugin->GetWidget());
        
LeftNavigationBarPlugin->addMainMenu("FindFiducial", QIcon(":/Gen2WGMTFTester/images/fiducial/findFiducial.png"));
LeftNavigationBarPlugin->addMenuWidget("FindFiducial", 1, new QLabel("aaaaaaaaaaa"));
LeftNavigationBarPlugin->addMainMenu("EyeBoxScan", QIcon(":/Gen2WGMTFTester/images/fiducial/eyeBoxScan.jpg"));
LeftNavigationBarPlugin->addMenuWidget("EyeBoxScan", 2, new QLabel("bbbbbbbbbb"));

(1)我们先通过SetParent设置导航栏的的父窗口为centralWidget并把垂直布局设置到导航栏中。
(2)通过addMainMenu设置导航栏第一个标签为“MTFMeasure”,并设置标签的图标。
(3)通过addMenuWidget设置第一个界面为"MTF",第二个参数0表示把该界面放在第一个标签上显示,第三个参数拿到mtf的界面传入放置到导航栏的m_centerQVBoxLayout布局中。
(4)同理下面依次添加第二个标签和放置第二个界面,添加第三个标签放置第三个界面

在这里插入图片描述
源码下载

在这里插入图片描述
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦回阑珊

一毛不嫌多,一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值