关于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();
}
相关推荐
上去我就QWER3 小时前
解锁Qt元对象系统:C++编程的超强扩展
c++·qt
freedom_1024_3 小时前
【c++ qt】QtConcurrent与QFutureWatcher:实现高效异步计算
java·c++·qt
minji...3 小时前
C++ 模板进阶
开发语言·c++
lsx2024063 小时前
HTML 音频/视频
开发语言
我叫汪枫4 小时前
【刷机分享】解决K20Pro刷入PixelOS后“网络连接”受限问题(附详细ADB命令)
开发语言·adb·php
老程序员刘飞4 小时前
hardhat 搭建智能合约
开发语言·php·智能合约
Autism1144 小时前
javase-day22-stream
java·开发语言·windows·笔记
江塘4 小时前
机器学习-KNN算法实战及模型评估可视化(C++/Python实现)
开发语言·c++·人工智能·python·算法·机器学习
KL41804 小时前
【QT】窗口
c++·qt