关于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();
}
相关推荐
R1nG86311 小时前
多线程安全设计 CANN Runtime关键数据结构的锁优化
开发语言·cann
初次见面我叫泰隆11 小时前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
亓才孓11 小时前
[Class的应用]获取类的信息
java·开发语言
开开心心就好11 小时前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
Never_Satisfied11 小时前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
3GPP仿真实验室11 小时前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon11 小时前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity11 小时前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
沐知全栈开发11 小时前
CSS3 边框:全面解析与实战技巧
开发语言
island131411 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络