网站开发设计制作合同,做推广网站费用,帝国cms官网,公司网站模板图片Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境#xff08;IDE#xff09;4.2. 图形设计软件4.3. 数据分… Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境IDE4.2. 图形设计软件4.3. 数据分析和可视化工具 5. 下载链接6. 构建7. 创建include文件夹8. 在lib和include同级目录创建QtDock.pri文件9. 调用10. 小栗子11. 心得 1. Qt-Advanced-Docking-System描述
Qt - Advanced - Docking - System是一个用于Qt框架的扩展库它提供了高级的停靠窗口Docking Window功能。在传统的图形用户界面GUI应用程序中停靠窗口能够让用户灵活地组织和管理界面空间方便用户根据自己的需求对各种工具窗口、信息窗口等进行布局。
2. 功能特点
2.1. 灵活的停靠方式
支持多种停靠方式可以将窗口停靠在主窗口的边缘上、下、左、右就像许多集成开发环境IDE中的工具窗口一样。例如在一个代码编辑器软件中可以将文件浏览器窗口停靠在主编辑窗口的左侧将调试信息窗口停靠在底部。而且这些窗口还可以进行浮动Floating操作用户能够将停靠窗口拖离主窗口的边缘使其成为一个独立的浮动窗口方便在多个屏幕或者复杂的布局场景下使用。
2.2. 嵌套停靠
允许嵌套停靠这意味着可以在一个已停靠的窗口内部再创建停靠区域实现更复杂的布局。例如在一个图形处理软件中可以在主图像显示窗口的一侧停靠一个包含多个工具选项卡如颜色调整、滤镜等的窗口而在这个工具选项卡窗口内部又可以将不同的工具组如亮度/对比度调整组和色彩平衡调整组进行进一步的停靠布局。
2.3. 自定义布局保存与恢复
能够帮助用户保存自定义的窗口布局并且在下次启动应用程序时恢复。这对于那些有复杂工作流程和特定界面布局偏好的用户非常有用。比如一个专业的音频编辑软件用户可能花费了很多时间来调整各个音频轨道窗口、效果窗口和混音窗口的布局通过这个功能下次打开软件时就可以快速恢复到之前的工作布局。
2.4. 外观和行为定制
提供了丰富的选项来定制停靠窗口的外观和行为。可以设置窗口的标题栏样式包括按钮的显示如最小化、最大化、关闭按钮和外观。还可以控制窗口的拖动行为、缩放行为等。例如在一个具有简洁风格要求的软件中可以隐藏停靠窗口标题栏上的一些不必要的按钮或者调整窗口拖动时的敏感度。
3. 与Qt原生停靠系统的比较
Qt本身自带了基本的停靠系统但Qt - Advanced - Docking - System在功能上更加丰富和灵活。Qt原生停靠系统能够满足一些简单的应用场景但在面对复杂的多窗口、嵌套式停靠以及高度定制化的需求时可能会显得力不从心。 例如Qt原生停靠系统在处理多个窗口之间的嵌套关系以及复杂的浮动和重新停靠操作时可能没有Qt - Advanced - Docking - System那样直观和方便。
4. 使用场景
4.1. 集成开发环境IDE
在IDE中通常需要同时展示多个工具窗口如代码编辑器、项目资源管理器、调试控制台等。Qt - Advanced - Docking - System可以让这些窗口以灵活的方式停靠方便开发者根据自己的编程习惯进行布局。而且开发者可以方便地将某个窗口浮动出来放在另一个屏幕上进行参考比如将文档窗口浮动出来对照代码进行编写。
4.2. 图形设计软件
对于图形设计软件需要各种工具窗口如颜色调色板、图层管理、图形元素库等。通过该系统可以将这些工具窗口以合适的方式停靠在主绘图窗口周围并且可以根据用户的操作习惯进行布局调整如将常用的工具窗口停靠在更方便操作的位置或者将不常用的窗口隐藏或最小化。
4.3. 数据分析和可视化工具
在这类工具中可能有数据输入窗口、数据处理窗口、图表显示窗口等多种窗口。使用Qt - Advanced - Docking - System可以实现这些窗口的有效布局比如将数据输入和处理窗口停靠在一起方便用户进行操作同时将图表显示窗口以较大的空间进行停靠便于观察数据可视化的结果。
5. 下载链接
链接: link https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System 下载后得到一个压缩包直接解压使用QtCreator直接打开使用库版本5.8的得kit进行构建因为里面用到的一个Q_NAMESPACE宏是5.8版本开始引入的。我这里是使用Qt6版本这个库也支持Qt6版本。
6. 构建
直接对src进行构建构建完后会生成lib文件夹里面有.a 、 .dll 。 lib目录同级下的src目录是生成.o和makefile等文件的目录可删除。
7. 创建include文件夹
在lib目录创建include文件夹然后将Qt-Advanced-Docking-System-master目录下的src目录下的所有文件都拷贝到include文件夹然后将所有.cpp文件删除组成调用库的头文件目录。
8. 在lib和include同级目录创建QtDock.pri文件
接下来创建个QtDock文件夹将lib目录、include目录、QtDock.pri放到QtDock目录内。 在QtDock.pri文件添加内容如下用于配置和调用这样在.pro文件只需要引入QtDock.pri就可以使用了酷
LIBS -L$$PWD/lib -lqtadvanceddockingINCLUDEPATH $$PWD/include/
DEPENDPATH $$PWD/include/QtDock.pri文件内容可根据系统、模式、编译器、或者一些其他配置进行自定义编写。 以上步骤6、步骤7、步骤8将QtDock配置成一个模块便于引用。
9. 调用
创建新的Qt项目将封装好的QtDock目录直接拷贝到Qt项目下。 在.pro文件中添加以下内容就可以调用了
include($$PWD/QtDock/QtDock.pri)10. 小栗子
部分代码如下:
#include mainwindow.h
#include ui_mainwindow.h#define VERSION 9527int MainWindow::s_nIndex 0;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);m_pLabel new QLabel();ui-statusbar-addWidget(m_pLabel);m_pMgr new ads::CDockManager(this);setCentralWidget(m_pMgr);m_pWCentral new ads::CDockWidget(中);m_pWLeft new ads::CDockWidget(左);m_pWuP new ads::CDockWidget(上);m_pWRight new ads::CDockWidget(右);m_pWBottom new ads::CDockWidget(下);m_pMgr-setCentralWidget(m_pWCentral);m_pWLeft-setWidget(new QLabel(左));m_pWuP-setWidget(new QLabel(上));m_pWRight-setWidget(new QLabel(右));m_pWBottom-setWidget(new QLabel(下));m_pWCentral-setWidget(new QLabel(中));m_pMgr-addDockWidget(ads::DockWidgetArea::LeftDockWidgetArea, m_pWLeft);m_pMgr-addDockWidget(ads::DockWidgetArea::TopDockWidgetArea, m_pWuP);m_pMgr-addDockWidget(ads::DockWidgetArea::RightDockWidgetArea, m_pWRight);m_pMgr-addDockWidget(ads::DockWidgetArea::BottomDockWidgetArea, m_pWBottom);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_action_saveState_triggered()
{m_ba m_pMgr-saveState(VERSION);m_pLabel-setText(保存布局.);
}void MainWindow::on_action_restoreState_triggered()
{bool bRestore m_pMgr-restoreState(m_ba, VERSION);if (bRestore)m_pLabel-setText(加载布局成功.);
}void MainWindow::on_action_addUpLayout_triggered()
{s_nIndex;ads::CDockWidget* pW new ads::CDockWidget(QString(新添加 上 布局_%1).arg(s_nIndex));pW-setWidget(new QLabel(QString(新添加 上 布局)));m_pMgr-addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, pW, m_pWuP-dockAreaWidget());
}void MainWindow::on_action_addBottomLayout_triggered()
{s_nIndex;ads::CDockWidget* pW new ads::CDockWidget(QString(新添加 下 布局_%1).arg(s_nIndex));pW-setWidget(new QLabel(QString(新添加 下 布局)));m_pMgr-addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, pW, m_pWBottom-dockAreaWidget());
}void MainWindow::on_action_addLeftLayout_triggered()
{s_nIndex;ads::CDockWidget* pW new ads::CDockWidget(QString(新添加 左 布局_%1).arg(s_nIndex));pW-setWidget(new QLabel(QString(新添加 左 布局)));m_pMgr-addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, pW, m_pWLeft-dockAreaWidget());
}void MainWindow::on_action_addRightLayout_triggered()
{s_nIndex;ads::CDockWidget* pW new ads::CDockWidget(QString(新添加 右 布局_%1).arg(s_nIndex));pW-setWidget(new QLabel(QString(新添加 右 布局)));m_pMgr-addDockWidget(ads::DockWidgetArea::CenterDockWidgetArea, pW, m_pWRight-dockAreaWidget());
} 11. 心得
CDockWidget标题名称不能重复不然恢复布局时重复的名称会只显示一个窗口控件CDockWidget需要设置控件不然恢复布局时都会消失如果需要向某一Dock设置平行布局需设置ads::DockWidgetArea::CenterDockWidgetArea;恢复布局后之前绑定的信号和槽有的可能就失效了上下布局时是均分的如需设置窗口显示比例需调用CDockManager类中的void setSplitterSizes(CDockAreaWidget *ContainedArea, const QListint sizes)函数使用此模块时若自由化程度较高则出Bug的概率就会随之提升。