0
点赞
收藏
分享

微信扫一扫

【Qt开源库】之Advanced-Docking-System使用

1.前言

顶层浮动窗口在很多软件中都有应用,比如ps。 image.png 使用浮动窗口灵活、方便、操作性较强、每个从主窗体拖拽出的窗体都可以看做一个单独的窗体,可分屏操作。 Qt也有自带的顶层浮动窗口,如QDockWidget,可设置窗口特性、窗口浮动等。 使用如下:

    QTextBrowser* pTB = new QTextBrowser(this);

    QDockWidget* pDW_navigation = new QDockWidget("导航区");
    pDW_navigation->setAllowedAreas(Qt::LeftDockWidgetArea);
    QDockWidget* pDW_attri = new QDockWidget("属性区");
    QDockWidget* pDW_hint = new QDockWidget("消息区");

    addDockWidget(Qt::LeftDockWidgetArea, pDW_navigation);
    addDockWidget(Qt::LeftDockWidgetArea, pDW_attri);
    addDockWidget(Qt::BottomDockWidgetArea, pDW_hint);

    setCentralWidget(pTB);

image.png Qt Designer也使用了该框架,如下: image.png

2.Qt-Advanced-Docking-System

Qt-Advanced-Docking-System是一个类似于QDockWidget的库,功能比QDockWidget丰富,有很好的交互,很多成熟的软件都有它的影子。

2.1项目地址

项目地址:https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System

2.2使用

有两种使用方式:1.直接使用源码;2.编译成库使用。 编译库调用代码,需要有该库的头文件及lib库(供参考):

#第三方库加载
LIBS += -L$${库路径} -lqtadvanceddocking
# 引用头文件
INCLUDEPATH += $$PWD/路径/QtDock/
DEPENDPATH += $$PWD/路径/QtDock/

使用代码如下:

    ads::CDockManager* pDockManager = new ads::CDockManager();
    // 设置dock管理
    setCentralWidget(pDockManager);
    ads::CDockWidget* pDockgzq = new ads::CDockWidget("工作区");
    ads::CDockWidget* pDockdh = new ads::CDockWidget("导航区");
    ads::CDockWidget* pDocksc = new ads::CDockWidget("输出");

    // 工作区
    pDockManager->setCentralWidget(new QWidget());

    // 不能移动,不能关闭,不能悬浮
    pDockgzq->setFeature(ads::CDockWidget::DockWidgetMovable, true);
    pDockgzq->setFeature(ads::CDockWidget::DockWidgetClosable, true);
    pDockgzq->setFeature(ads::CDockWidget::DockWidgetFloatable, true);

    // 设置控件
    pDockdh->setWidget(new QWidget());
    pDockManager->addDockWidget(ads::LeftDockWidgetArea, pDockdh);

    pDocksc->setWidget(new QWidget());
    QAction* pActClear = new QAction(QIcon(""), "动作", this);
    pDocksc->setTitleBarActions(QList<QAction*>() << pActClear);
    pDockManager->addDockWidget(ads::BottomDockWidgetArea, pDocksc, pDockdh->dockAreaWidget());


    // 设置伸缩尺寸,必须放到addDockWidget()操作后,不然不生效
    pDockManager->setSplitterSizes(pDockgzq->dockAreaWidget(), QList<int>() << 100 << 150);

    // 设置视图
    QMap<QString, ads::CDockWidget*> mapDockAct = pDockManager->dockWidgetsMap();
    for(auto itor = mapDockAct.begin(); itor != mapDockAct.end(); itor++)
    {
        menu->addAction((itor.value())->toggleViewAction());
    }
举报

相关推荐

0 条评论