关于Qt开发UI框架Qt Advanced Docking System测试

案例使用QWidget窗体进行测试,大部分问题基本解决,也确实是个非常不错的布局库,官方案例使用QMainWidget可以实现边缘区域隐藏非常适合作为参数设置,但在QWidget内使用有问题,不知道怎么原因,测试图片如下所示,标题栏样式微调

我感觉有几个优点很好用

1、任意布局停靠

2、可自动保存、还原布局

3、可绑定QAction控件实现显示和隐藏

下载链接https://download.csdn.net/download/lidengfeng0ff/92178691?spm=1001.2014.3001.5503

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSettings>
#include "DockManager.h"
#include "form.h"

namespace Ui {
class Widget;
}

using namespace ads;

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void showEvent(QShowEvent *event);

private:
    Ui::Widget *ui;
    ads::CDockManager* m_DockManager;
    ads::CDockWidget* DockWidget1;
    ads::CDockWidget* DockWidget2;
    ads::CDockWidget* DockWidget3;
    Form form1;
    Form form2;
    Form form3;
private:
    void saveDockLayout() {
        QSettings Settings("Settings.ini", QSettings::IniFormat);
        Settings.setValue("mainWindow/DockingState", m_DockManager->saveState());
    }

    void restoreDockLayout() {
        QSettings Settings("Settings.ini", QSettings::IniFormat);
        m_DockManager->restoreState(Settings.value("mainWindow/DockingState").toByteArray());
    }

};

#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //新建管理器
    m_DockManager = new ads::CDockManager();
    ui->verticalLayout->addWidget(m_DockManager);


    //添加子窗口
    DockWidget1 = m_DockManager->createDockWidget(QString("图像"));
    DockWidget1->setWidget(&form1);
    //设置子窗口禁止关闭
    DockWidget1->setFeatures(ads::CDockWidget::DockWidgetDeleteOnClose |
                     ads::CDockWidget::DockWidgetMovable);
    //放置子窗口
    m_DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget1);
    QAction* showAction1 = DockWidget1->toggleViewAction();
    this->setContextMenuPolicy(Qt::ActionsContextMenu);
    this->addAction(showAction1);

    DockWidget2 = m_DockManager->createDockWidget(QString("曲线1"));
    DockWidget2->setWidget(&form2);
    DockWidget2->setAutoHide(true);
    //设置子窗口禁止关闭
    DockWidget2->setFeatures(ads::CDockWidget::DockWidgetClosable |
                     ads::CDockWidget::DockWidgetMovable);
    m_DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget2);
    QAction* showAction2 = DockWidget2->toggleViewAction();
    this->addAction(showAction2);


    DockWidget3 = m_DockManager->createDockWidget(QString("曲线2"));
    DockWidget3->setWidget(&form3);
    //设置子窗口禁止关闭
    DockWidget3->setFeatures(ads::CDockWidget::DockWidgetClosable |
                     ads::CDockWidget::DockWidgetMovable|ads::CDockWidget::DockWidgetPinnable);
    m_DockManager->addDockWidget(ads::RightAutoHideArea, DockWidget3);
    QAction* showAction3 = DockWidget3->toggleViewAction();
    this->addAction(showAction3);

    QFile StyleSheetFile("visual_studio_light.css");
    StyleSheetFile.open(QIODevice::ReadOnly);
    QTextStream StyleSheetStream(&StyleSheetFile);
    auto Stylesheet = StyleSheetStream.readAll();
    m_DockManager->setStyleSheet(Stylesheet);
}

Widget::~Widget()
{
    saveDockLayout();
    delete ui;
}

void Widget::showEvent(QShowEvent *event)
{
    restoreDockLayout();
}
相关推荐
傻啦嘿哟7 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670797 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
李少兄8 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh8 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei9 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界9 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
繁星蓝雨10 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J10 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥11 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk55511 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python