Visual Studio Qt Qt-Advanced-Docking-System 新建停靠窗口+布局记录+布局载入

文章目录

  • 前言
  • 一、如何下载Qt-Advanced-Docking-System
  • 二、如何在visual studio中载入Qt-Advanced-Docking-System插件
    • 1.生成dll和lib
    • 2.导入dll和lib
  • 三、如何使用Qt-Advanced-Docking-System
    • 1.新建停靠窗口和窗口管理
    • 2.实现布局存储和载入
    • 3.额外注意点
  • 总结


前言

最近在使用visual studio 2022和qt开发项目时,涉及到制作大数据可视化界面的工作。
为了完成这一功能,查询了现有的实现方案,最终选择使用:Qt-Advanced-Docking-System
作为布局方案的实现方式。
此时,就遇到几个问题:

  1. 如何下载Qt-Advanced-Docking-System
  2. 如何在visual studio中载入Qt-Advanced-Docking-System插件
  3. 如何使用Qt-Advanced-Docking-System
    接下来将根据这几个问题,完成本文叙述。

一、如何下载Qt-Advanced-Docking-System

下载链接:github地址 https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System

二、如何在visual studio中载入Qt-Advanced-Docking-System插件

1.生成dll和lib

  1. 打开压缩包Qt-Advanced-Docking-System-master.zip(不管你是git下来还是从哪下载下来的)
  2. 找到Qt-Advanced-Docking-System-master\src目录,用qt-creator打开src.pro
  3. 通过Debug模式,和Release模式各自buid一遍
  4. 在Qt-Advanced-Docking-System-master\lib目录下,能够得到我们想要的:
    qtadvanceddockingd.dll qtadvanceddockingd.lib
    qtadvanceddocking.dll qtadvanceddocking.lib
    收好。

2.导入dll和lib

  1. 接下来在你喜欢的目录(我的话就在项目里新建一个bin\dock目录用来放置库和头文件)里,新建一个include目录和一个lib目录
  2. 将Qt-Advanced-Docking-System-master\src目录下的所有.h和.cpp文件放到刚刚建好的哪个include目录下
  3. 将Qt-Advanced-Docking-System-master\lib下刚刚生成的dll和lib文件放到刚刚建好的lib目录下
  4. 在你的项目里,分别在debug和release的属性管理器中,各新建一个新的属性页,我起名叫adsdockd.props和adsdock.props。
  5. 在adsdockd.props,adsdock.props中 包含目录给include,库目录给lib
  6. adsdockd.props中 链接器-输入-附加依赖项 加上qtadvanceddockingd.lib
  7. adsdock.props中 链接器-输入-附加依赖项 加上qtadvanceddocking.lib
  8. 在跑起来生成的debug目录下放qtadvanceddockingd.dll
  9. 在跑起来生成的release目录下放qtadvanceddocking.dll
  10. 在享用的地方,加上#include “DockManager.h”

三、如何使用Qt-Advanced-Docking-System

1.新建停靠窗口和窗口管理

.h文件中:

#include "DockManager.h"

类中:

private:
	ads::CDockManager* m_pDockManager = nullptr;
	QMainWindow* visualwidget = nullptr;//用于放置大数据可视化的窗口
	void initVisualWidget();//初始化dock窗口

.cpp文件中:

	visualwidget = new QMainWindow(<放的新建的窗口指针>);
	visualwidget->setWindowFlags(Qt::Widget);//修改窗口为Widget属性
	m_pDockManager = new ads::CDockManager(visualwidget);

	ads::CDockWidget* dock_1 = new ads::CDockWidget(tr("dock_1"), visualwidget);//窗口1
	dock_1->setWidget(<你要放在悬浮窗口中的窗口>);
	dock_1->setFeatures(ads::CDockWidget::AllDockWidgetFeatures);//可以停靠的位置
	m_pDockManager->addDockWidget(ads::CenterDockWidgetArea, dock_1);

	//以上可以多放几个
	//...

	QMenu * viewMenu = visualwidget->menuBar()->addMenu(tr("Display Window")); //展示窗口
	viewMenu->addAction(dock_1->toggleViewAction()); //把之前新建的窗口都放进去,在下拉菜单里可以控制是否展示

2.实现布局存储和载入

.h文件中:
#include “DockManager.h”
类中:
private slots:
//保存大数据展示布局
void saveVisualState();
//载入大数据展示布局
void restoreVisualState();
.cpp文件中:

	QMenu* setViewMenu = visualwidget->menuBar()->addMenu(tr("Display Settings")); //展示设定
	setViewMenu->addAction(tr("Save layout"), this, SLOT(saveVisualState()));//保存布局
	setViewMenu->addAction(tr("Restore layout"), this, SLOT(restoreVisualState()));//载入布局

void saveVisualState()
{
	QFile file(App_Path + "/cfg/VisualLayout.ini");
	if (file.open(QIODevice::WriteOnly))//不存在则创建,默认覆盖  | QIODevice::Append
	//if (file.open(QIODevice::WriteOnly | QIODevice::Append));//文末追加,不存在则创建
	{
		QDataStream out(&file);
		out << m_pDockManager->saveState();
		file.close();
	}
}

void restoreVisualState()
{
	QFile file(App_Path + "/cfg/VisualLayout.ini");
	if (file.open(QIODevice::ReadOnly))
	{
		QByteArray ba;
		QDataStream in(&file);
		in >> ba;
		file.close();
		if (m_pDockManager->restoreState(ba))
		{
			qDebug() << QString("载入布局界面成功");
		}
		else
		{
			qDebug() << QString("载入布局界面失败") << App_Path + "/cfg/VisualLayout.ini";
		}
	}
}

3.额外注意点

在mainwindow中或者dock中增加layout很可能不生效,需要加一个widget嵌套一下才行。

总结

差不多就这样了,基于上述描述,就可以正常使用了。

你可能感兴趣的:(QT技巧,实用技巧,初学者,qt,开发语言)