关于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();
}
相关推荐
xuxie9919 小时前
N11 ARM-irq
java·开发语言
wefly201720 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
luanma15098021 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php
寂静or沉默21 小时前
2026最新Java岗位从P5-P7的成长面试进阶资源分享!
java·开发语言·面试
liwenzhuola21 小时前
解决 Ubuntu 上 Qt Creator 项目编译失败的问题
数据库·qt·ubuntu
kyriewen1121 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript
娇娇yyyyyy1 天前
QT编程(18): Qt QItemSelectionModel介绍
开发语言·qt
豆豆的java之旅1 天前
软考中级软件设计师 数据结构详细知识点(含真题+练习题,可直接复习)
java·开发语言·数据结构
sthnyph1 天前
QT开发:事件循环与处理机制的概念和流程概括性总结
开发语言·qt
大尚来也1 天前
Java 反射:从“动态魔法”到生产实战的避坑指南
开发语言