Qt扩展-KDDockWidgets 的使用

KDDockWidgets 的使用

  • 一、概述
  • 二、原理说明
  • 三、代码实例
    • 1. 项目简述
    • 2. 布局源码

一、概述

KDDockWidgets 的使用相对比较简单,建议直接参考 其提供的例子。

二、原理说明

在这种多窗口布局显示的使用最常用的就是这两个类, 也就是 MainWindow 和 DockWidget ;
在这里插入图片描述

在我的理解里面,MainWindow充当 DockWindow的活动区域,也相当于 DockWindow的父容器。
DockWindow 与 DockWindow 的实例的排布关系可以是并列显示的,也可以是结合拼在一起的 合并显示

DockWidget 窗口作为我们业务逻辑的 容器窗口,这个只是作为Dock功能的一个容器,本质上不会影响业务。

  • 并列显示
    并列显示就是使用者经常会使用的窗口会长时间打开来看
    在这里插入图片描述
  • 合并显示
    合并显示则是有些显示窗口并不是用户认为非常的,可以放在一起让,自己切换着来看的。
    在这里插入图片描述
    在实际使用过程中,窗口可能需要关闭或者隐藏,这个框架同样给我们提供了对应的接口,即便是我们关闭了窗口,后面也是有入口调出之前关闭的窗口的。

最后一个常用的便是 用户自己排列了这些窗口的布局,希望下次再打开的时候按照之前的排列顺序给排布好,这个框架也是提供了保存布局情况的接口,非常容易使用的。也比较简单。

三、代码实例

在这里插入图片描述

上面是用KDDockWidgets 实现的一个类似 qt creator 的编辑器的框架

1. 项目简述

WorkBenchDock 就是左侧工作栏的 Dock 窗口,目的就是 来容纳 WorkBenchWD ,具体的业务逻辑实现其实放置于 WorkBenchWD 中的。

    // 主Dock 窗口KDDockWidgets::MainWindow *DockMainWindow;//Dock 窗口KDDockWidgets::DockWidget *WorkBenchDock;KDDockWidgets::DockWidget *QuestionDock;KDDockWidgets::DockWidget *SearchDock;KDDockWidgets::DockWidget *EditorDock;// Dock 窗口中实际使用的控件WorkBenchWG *WorkBenchWD;SearchWG  * SearchWD;QuestionWG * QuestionWD;EditorWG * EditorWD;

2. 布局源码

  • MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <kddockwidgets/MainWindow.h>
#include <kddockwidgets/DockWidget.h>
#include <QuestionWG.h>
#include <SearchWG.h>
#include <WorkBenchWG.h>
#include  <EditorWG.h>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:void InitWidget();void InitLayout();void InitMenu();private:Ui::MainWindow *ui;// 主Dock 窗口KDDockWidgets::MainWindow *DockMainWindow;//Dock 窗口KDDockWidgets::DockWidget *WorkBenchDock;KDDockWidgets::DockWidget *QuestionDock;KDDockWidgets::DockWidget *SearchDock;KDDockWidgets::DockWidget *EditorDock;// Dock 窗口中实际使用的控件WorkBenchWG *WorkBenchWD;SearchWG  * SearchWD;QuestionWG * QuestionWD;EditorWG * EditorWD;
};
#endif // MAINWINDOW_H
  • MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);InitWidget();InitLayout();InitMenu();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::InitWidget()
{DockMainWindow = new KDDockWidgets::MainWindow("DOCKMAINWINDOW");WorkBenchDock = new KDDockWidgets::DockWidget("WORKBENCH");WorkBenchDock->setMaximumWidth(300);WorkBenchDock->setMinimumWidth(120);WorkBenchDock->setTitle(tr("项目"));QuestionDock = new KDDockWidgets::DockWidget("QUESTIONDOCK");QuestionDock->setTitle(tr("问题"));QuestionDock->setMaximumWidth(600);SearchDock = new KDDockWidgets::DockWidget("SEARCHDOCK");SearchDock->setTitle(tr("搜索"));EditorDock = new KDDockWidgets::DockWidget("EDITORDOCK");EditorDock->setTitle(tr("编辑器"));WorkBenchWD = new WorkBenchWG;SearchWD = new SearchWG;QuestionWD=  new QuestionWG;EditorWD = new EditorWG;WorkBenchDock->setWidget(WorkBenchWD);SearchDock->setWidget(SearchWD);QuestionDock->setWidget(QuestionWD);EditorDock->setWidget(EditorWD);
}void MainWindow::InitLayout()
{this->setCentralWidget(DockMainWindow);DockMainWindow->addDockWidget(EditorDock, KDDockWidgets::Location_OnRight);DockMainWindow->addDockWidget(SearchDock, KDDockWidgets::Location_OnBottom);DockMainWindow->addDockWidget(WorkBenchDock, KDDockWidgets::Location_OnLeft);SearchDock->addDockWidgetAsTab(QuestionDock);
}void MainWindow::InitMenu()
{ui->DisplayMenu->addAction(WorkBenchDock->toggleAction());ui->DisplayMenu->addAction(QuestionDock->toggleAction());ui->DisplayMenu->addAction(SearchDock->toggleAction());ui->DisplayMenu->addAction(EditorDock->toggleAction());//保存当前布局QAction *SaveLayoutAction = new QAction("保存布局", ui->LayoutMenu);connect(SaveLayoutAction, &QAction::triggered, [=](){KDDockWidgets::LayoutSaver saver;const bool result = saver.saveToFile(QStringLiteral("mylayout.json"));});QAction *LoadLayoutAction = new QAction("加载布局", ui->LayoutMenu);connect(LoadLayoutAction, &QAction::triggered, [=](){KDDockWidgets::RestoreOptions options = KDDockWidgets::RestoreOption_None;options |= KDDockWidgets::RestoreOption_RelativeToMainWindow;KDDockWidgets::LayoutSaver saver(options);saver.restoreFromFile(QStringLiteral("mylayout.json"));});ui->LayoutMenu->addAction(SaveLayoutAction);ui->LayoutMenu->addAction(LoadLayoutAction);
}

若需要全部源码,评论区给我留言即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 开启配置binlog以及通过binlog恢复数据

目录 一、binlog日志基本概念二、开启binlog日志记录2.1、查看binlog日志记录启用状态2.2、开启配置binlog日志 三、制作测试数据&#xff08;可以先不执行&#xff0c;这里是为后续数据恢复做准备&#xff0c;先看数据恢复流程&#xff09;四、使用binlog日志恢复数据4.1、前置…

中秋特辑——3D动态礼盒贺卡(可监听鼠标移动)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

ROS的通信机制

ROS是一个分布式框架&#xff0c;为用户提供多节点&#xff08;进程&#xff09;之间的通信服务&#xff0c;所有软件功能和工 具都建立在这种分布式通信机制上&#xff0c;所以ROS的通信机制是最底层也是最核心的技术。在大多数应用场景下&#xff0c;尽管我们不需要关注底层通…

7.网络原理之TCP_IP(下)

文章目录 4.传输层重点协议4.1TCP协议4.1.1TCP协议段格式4.1.2TCP原理4.1.2.1确认应答机制 ACK&#xff08;安全机制&#xff09;4.1.2.2超时重传机制&#xff08;安全机制&#xff09;4.1.2.3连接管理机制&#xff08;安全机制&#xff09;4.1.2.4滑动窗口&#xff08;效率机制…

软件测试面试经验分享,真实面试题

前言 本人普通本科计算机专业&#xff0c;做测试也有3年的时间了&#xff0c;讲下我的经历&#xff0c;我刚毕业就进了一个小自研薪资还不错&#xff0c;有10.5k&#xff08;个人觉得我很优秀&#xff09;&#xff0c;在里面呆了两年&#xff0c;积累了一些的经验和技能&#…

Flink Batch SQL Improvements on Lakehouse

本文整理自阿里云研发工程师刘大龙&#xff08;风离&#xff09;&#xff0c;在 Streaming Lakehouse Meetup 的分享。内容主要分为三个部分&#xff1a; Flink Batch on Paimon 挑战Flink Batch 核心优化后续规划 点击查看原文视频 & 演讲PPT 一、Flink Batch on Paimon 挑…

启动 React APP 后经历了哪些过程

本文作者为 360 奇舞团前端开发工程师 前言 本文中使用的React版本为18&#xff0c;在摘取代码的过程中删减了部分代码&#xff0c;具体以源代码为准。 在React 18里&#xff0c;通过ReactDOM.createRoot创建根节点。并且通过调用原型链上的render来渲染。 本文主要是从以下两个…

Spring实现简单的Bean容器

1.BeanDefinition&#xff0c;用于定义 Bean 实例化信息&#xff0c;现在的实现是以一个 Object 存放对象 public class BeanDefinition {/*** bean对象*/private Object bean;/*** 存放 &#xff08;定义&#xff09;Bean 对象*/public BeanDefinition(Object bean) {this.bea…

长期用眼不再怕!NineData SQL 窗口支持深色模式

您有没有尝试过被明亮的显示器闪瞎眼的经历&#xff1f; 在夜间或低光环境下&#xff0c;明亮的界面会导致许多用眼健康问题&#xff0c;例如长时间使用导致的眼睛疲劳、干涩和不适感&#xff0c;同时夜间还可能会抑制褪黑素分泌&#xff0c;给您的睡眠质量带来影响。 这些问…

​比特币ETF将迎来审核窗口期

作者&#xff1a;Greg Cipolaro&#xff0c;NYDIG 全球研究主管 编译&#xff1a;WEEX Exchange 几只重要的 ETF 申请将于 10 月中旬迎来审核窗口&#xff0c;本文通过观察近期期权市场的动态&#xff0c;以研究交易者对这些关键 ETF 日期的仓位态度&#xff1b;门头沟&#xf…

Vue3 + TS 自动检测线上环境 —— 版本热更新提醒

&#x1f414; 前期回顾 编写 loading、加密解密 发布NPM依赖包&#xff0c;并实施落地使用_彩色之外的博客-CSDN博客 目录 &#x1f30d; 问题产生 &#x1f916; 性能效率 &#x1fa82; 新建 autoUpdate.ts &#x1f38b; 在App.vue使用 &#x1f30d; 问题产生 当用…

《扩散模型 从原理到实战》Hugging Face (二)

第二章 Hugging Face简介 本章无有效内容 第三章 从零开始搭建扩散模型 有时候&#xff0c;只考虑事情最简单的情况反而更有助于理解其工作原理。本章尝试从零开始搭建廓庵模型&#xff0c;我们将从一个简单的扩散模型讲起&#xff0c;了解其不同部分的工作原理&#xff0c;…

IntelliJ IDEA快速查询maven依赖关系

1.在Maven窗口中点击Dependencies->show Dependencies 2.得到依赖关系图 此时原有快捷键Ctrlf可以查询jar包&#xff0c;如果没有查询菜单出来则设置快捷键方式为 File->Settings->Keymap->搜索栏输入find->在Main Menu下Edit下Find下Find双击算则Add keyboard…

云可观测性安全平台——掌动智能

云可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能云可…

Oracle 11g_FusionOS_安装文档

同事让安装数据库&#xff0c;查询服务器信息发现操作系统是超聚变根据华为openEuler操作系统更改的自研操作系统&#xff0c;安装过程中踩坑不少&#xff0c;最后在超聚变厂商的技术支持下安装成功&#xff0c;步骤可参数该文。 一、 安装环境准备 1.1 软件下载 下载地址:…

ubuntu 20 安装 CUDA

1. 查看需要安装的cuda版本 nvidia-smi cuda的版本信息如下图所示 2. 去官网下载对应版本的CUDA 官网&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 弹出以下界面&#xff0c;依次点击以下按钮 得到以下内容&#xff1a; 复制下载链接&#xff0c;下载cuda11到本…

Selenium Webdriver自动化测试框架

最近正在编写selenium webdriver自动化框架&#xff0c;经过几天的努力&#xff0c;目前基本已经实现了一套即能满足数据驱动、又能满足Web关键字驱动的自动化框架&#xff08;主要基于 antjenkinstestngselenium webdriverjxl实现&#xff09;。通过这次的自动化框架开发&…

ChatGPT 在机器学习中的应用

办公室里一个机器人坐在人类旁边&#xff0c;Artstation 上的流行趋势&#xff0c;美丽的色彩&#xff0c;4k&#xff0c;充满活力&#xff0c;蓝色和黄色&#xff0c; DreamStudio出品 一、介绍 大家都知道ChatGPT。它在解释机器学习和深度学习概念方面也非常高效&#xff0c;…

外壳防护等级的最低要求

声明 本文是学习GB-T 3027-2012 船用白炽照明灯具. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了船用白炽照明灯具(以下简称灯具)的要求、试验方法、检验规则、标识、包装和储 存等。 本标准适用于电源电压在250V 以下的交流…

巨人互动|Facebook海外户Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一&#xff0c;同时也是最受欢迎的社交网站之一&#xff0c;Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户&#xff0c;覆盖了几乎所有国家和地区。这使得人们…