Qt-Advanced-Docking-System示例程序
写了一些简单的示例程序,帮助我更好地使用和了解Qt-Advanced-Docking-System
1.写一个如图页面布局的程序

m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidget=new ads::CDockWidget("中心页面");m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("页面2");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ads::CDockWidget* pDockWidget3=new ads::CDockWidget("页面3");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget4=new ads::CDockWidget("页面4");m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,pDockWidget4,centerDockWidget->dockAreaWidget());
2.在centerDockWidget->dockAreaWidget()的ads::BottomDockWidgetArea添加widget

m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidget=new ads::CDockWidget("中心页面");m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("页面2");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ads::CDockWidget* pDockWidget3=new ads::CDockWidget("页面3");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget4=new ads::CDockWidget("页面4");m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,pDockWidget4,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget5=new ads::CDockWidget("页面5");m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,pDockWidget5,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget6=new ads::CDockWidget("页面6");m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,pDockWidget6,centerDockWidget->dockAreaWidget());
3.写一个如图所示的程序

m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidget=new ads::CDockWidget("中心页面");centerDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("页面2");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ads::CDockWidget* pDockWidget3=new ads::CDockWidget("页面3");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());
4.

m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidget=new ads::CDockWidget("中心页面");centerDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("页面2");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ads::CDockWidget* pDockWidget3=new ads::CDockWidget("页面3");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget4=new ads::CDockWidget("页面4");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget4,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget5=new ads::CDockWidget("页面5");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget5,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget6=new ads::CDockWidget("页面6");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget6,centerDockWidget->dockAreaWidget());
5.

m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidget=new ads::CDockWidget("中心页面");centerDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("页面2");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ads::CDockWidget* pDockWidget3=new ads::CDockWidget("页面3");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget4=new ads::CDockWidget("页面4");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget4,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget5=new ads::CDockWidget("页面5");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget5,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget6=new ads::CDockWidget("页面6");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget6,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget7=new ads::CDockWidget("页面7");m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,pDockWidget7,centerDockWidget->dockAreaWidget());ads::CDockWidget* pDockWidget8=new ads::CDockWidget("页面8");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget8,pDockWidget7->dockAreaWidget());ads::CDockWidget* pDockWidget9=new ads::CDockWidget("页面9");m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,pDockWidget9,pDockWidget7->dockAreaWidget());
6.


#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QListWidget>
#include <QLabel>
#include "DockManager.h"
#include "QtDock/DockAreaWidget.h"
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_actionAdd_triggered();private:Ui::MainWindow *ui;ads::CDockManager* m_pDockManger;ads::CDockWidget* centerDockWidget;ads::CDockWidget* bottomDockWidget;QListWidget* ListWidget;int mProjectNum=0;
};#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);centerDockWidget=new ads::CDockWidget("中心页面");centerDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("测试页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("项目管理");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ListWidget=new QListWidget(pDockWidget2);pDockWidget2->setWidget(ListWidget);ads::CDockWidget* pDockWidget3=new ads::CDockWidget("测试页面2");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());bottomDockWidget=new ads::CDockWidget("底部页面");bottomDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,bottomDockWidget,centerDockWidget->dockAreaWidget());
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_actionAdd_triggered()
{mProjectNum++;ListWidget->addItem(QString("项目%1").arg(mProjectNum));ads::CDockWidget* cDockWidget=new ads::CDockWidget(QString("中心页面%1").arg(mProjectNum));m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,cDockWidget,centerDockWidget->dockAreaWidget());ads::CDockWidget* bDockWidget=new ads::CDockWidget(QString("底部页面%1").arg(mProjectNum));m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,bDockWidget,bottomDockWidget->dockAreaWidget());
}
7.dockWidgetsMap()
QMap<QString, ads::CDockWidget*> map=m_pDockManger->dockWidgetsMap();qDebug()<<map.keys();for(auto key:map.keys()){qDebug()<<key.toStdString().c_str();}
中心页面
中心页面1
中心页面2
中心页面3
中心页面4
底部页面
底部页面1
底部页面2
底部页面3
底部页面4
测试页面1
测试页面2
项目管理

qDebug()<<"centralWidget():"<<m_pDockManger->centralWidget()->objectName().toStdString().c_str();
centralWidget(): 中心页面
8.

QMap<QString, ads::CDockWidget*> map=m_pDockManger->dockWidgetsMap();for(auto key:map.keys()){qDebug()<<key.toStdString().c_str();auto value = map[key];qDebug()<<"ads::CDockWidget:"<<value;qDebug()<<"dockAreaWidget:"<<value->dockAreaWidget();}
中心页面
ads::CDockWidget: ads::CDockWidget(0x3052108, name = "\u4E2D\u5FC3\u9875\u9762")
dockAreaWidget: ads::CDockAreaWidget(0x30818f0)
中心页面1
ads::CDockWidget: ads::CDockWidget(0x41f25a8, name = "\u4E2D\u5FC3\u9875\u97621")
dockAreaWidget: ads::CDockAreaWidget(0x30818f0)
底部页面
ads::CDockWidget: ads::CDockWidget(0x30f8f68, name = "\u5E95\u90E8\u9875\u9762")
dockAreaWidget: ads::CDockAreaWidget(0x30f90a8)
底部页面1
ads::CDockWidget: ads::CDockWidget(0x41f26c0, name = "\u5E95\u90E8\u9875\u97621")
dockAreaWidget: ads::CDockAreaWidget(0x30f90a8)
测试页面1
ads::CDockWidget: ads::CDockWidget(0x3092060, name = "\u6D4B\u8BD5\u9875\u97621")
dockAreaWidget: ads::CDockAreaWidget(0x3091ea8)
测试页面2
ads::CDockWidget: ads::CDockWidget(0x30eca80, name = "\u6D4B\u8BD5\u9875\u97622")
dockAreaWidget: ads::CDockAreaWidget(0x30ecad0)
项目管理
ads::CDockWidget: ads::CDockWidget(0x30d81b0, name = "\u9879\u76EE\u7BA1\u7406")
dockAreaWidget: ads::CDockAreaWidget(0x30d84a8)
9.
QList<ads::CDockAreaWidget*> areas=m_pDockManger->openedDockAreas();qDebug()<<areas;
(ads::CDockAreaWidget(0x3071828), ads::CDockAreaWidget(0x3082448), ads::CDockAreaWidget(0x30c81b0), ads::CDockAreaWidget(0x30dd250), ads::CDockAreaWidget(0x30e8fb8))
对应5块区域

10.

QMap<QString, ads::CDockWidget*> map=m_pDockManger->dockWidgetsMap();for(auto key:map.keys()){qDebug()<<key.toStdString().c_str();auto value = map[key];qDebug()<<"ads::CDockWidget:"<<value;qDebug()<<"dockAreaWidget:"<<value->dockAreaWidget();}
area: ads::CDockAreaWidget(0x31118a0) count: 5
area: ads::CDockAreaWidget(0x3122128) count: 1
area: ads::CDockAreaWidget(0x3168458) count: 1
area: ads::CDockAreaWidget(0x317c440) count: 1
area: ads::CDockAreaWidget(0x3189440) count: 5
相关函数:
QList<CDockWidget*> CDockAreaWidget::dockWidgets() const
这个信号也比较好用
ads::CDockAreaWidget::currentChanged
11.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QListWidget>
#include <QLabel>
#include "DockManager.h"
#include "QtDock/DockAreaWidget.h"
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_actionAdd_triggered();private:Ui::MainWindow *ui;ads::CDockManager* m_pDockManger;ads::CDockWidget* centerDockWidget;QHash<int,ads::CDockWidget*> centerHash;QHash<int,ads::CDockWidget*> bottomHash;ads::CDockWidget* bottomDockWidget;QListWidget* ListWidget;int mProjectNum=0;QLabel * mLabelOne;QLabel * mLabelTwo;
};#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_pDockManger=new ads::CDockManager(this);this->setCentralWidget(m_pDockManger);centerDockWidget=new ads::CDockWidget("中心页面");centerDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("测试页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);mLabelOne=new QLabel(pDockWidget1);pDockWidget1->setWidget(mLabelOne);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("项目管理");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ListWidget=new QListWidget(pDockWidget2);connect(ListWidget,&QListWidget::currentItemChanged,this,[=](QListWidgetItem *current, QListWidgetItem *previous){int index=current->data(Qt::UserRole).toInt();ads::CDockAreaWidget* centerArea=centerDockWidget->dockAreaWidget();centerArea->setCurrentDockWidget(centerHash[index]);ads::CDockAreaWidget* bottomArea=bottomDockWidget->dockAreaWidget();bottomArea->setCurrentDockWidget(bottomHash[index]);QString msg=QString("当时是项目%1").arg(index);mLabelOne->setText(msg);mLabelTwo->setText(msg);});pDockWidget2->setWidget(ListWidget);ads::CDockWidget* pDockWidget3=new ads::CDockWidget("测试页面2");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());mLabelTwo=new QLabel(pDockWidget3);pDockWidget3->setWidget(mLabelTwo);bottomDockWidget=new ads::CDockWidget("底部页面");bottomDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,bottomDockWidget,centerDockWidget->dockAreaWidget());
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_actionAdd_triggered()
{mProjectNum++;QListWidgetItem *item;item=new QListWidgetItem(ListWidget);item->setText(QString("项目%1").arg(mProjectNum));item->setData(Qt::UserRole,mProjectNum);ListWidget->addItem(item);ListWidget->setCurrentItem(item);ads::CDockWidget* cDockWidget=new ads::CDockWidget(QString("中心页面%1").arg(mProjectNum));m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,cDockWidget,centerDockWidget->dockAreaWidget());centerHash.insert(mProjectNum,cDockWidget);ads::CDockWidget* bDockWidget=new ads::CDockWidget(QString("底部页面%1").arg(mProjectNum));m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,bDockWidget,bottomDockWidget->dockAreaWidget());bottomHash.insert(mProjectNum,bDockWidget);QString msg=QString("当时是项目%1").arg(mProjectNum);mLabelOne->setText(msg);mLabelTwo->setText(msg);
}
12.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QListWidget>
#include <QLabel>
#include "DockManager.h"
#include "QtDock/DockAreaWidget.h"
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_actionAdd_triggered();void onProjectChanged(int index);
private:Ui::MainWindow *ui;ads::CDockManager* m_pDockManger;ads::CDockWidget* centerDockWidget;ads::CDockWidget* bottomDockWidget;QListWidget* ListWidget;QHash<int,ads::CDockWidget*> centerHash;QHash<int,ads::CDockWidget*> bottomHash;QHash<int,QListWidgetItem*> itemHash;int mProjectNum=0;QLabel * mLabelOne;QLabel * mLabelTwo;
};#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_pDockManger=new ads::CDockManager(this);qDebug()<<"m_pDockManger:"<<m_pDockManger;this->setCentralWidget(m_pDockManger);centerDockWidget=new ads::CDockWidget("中心页面");centerDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->setCentralWidget(centerDockWidget);m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,centerDockWidget);ads::CDockAreaWidget* centerArea=centerDockWidget->dockAreaWidget();connect(centerArea,&ads::CDockAreaWidget::currentChanged,this,&MainWindow::onProjectChanged);bottomDockWidget=new ads::CDockWidget("底部页面");bottomDockWidget->setFeature(ads::CDockWidget::NoTab,true);m_pDockManger->addDockWidget(ads::BottomDockWidgetArea,bottomDockWidget,centerDockWidget->dockAreaWidget());ads::CDockAreaWidget* bottomArea=bottomDockWidget->dockAreaWidget();connect(bottomArea,&ads::CDockAreaWidget::currentChanged,this,&MainWindow::onProjectChanged);ads::CDockWidget* pDockWidget1=new ads::CDockWidget("测试页面1");m_pDockManger->addDockWidget(ads::LeftDockWidgetArea,pDockWidget1);mLabelOne=new QLabel(pDockWidget1);pDockWidget1->setWidget(mLabelOne);ads::CDockWidget* pDockWidget2=new ads::CDockWidget("项目管理");m_pDockManger->addDockWidget(ads::TopDockWidgetArea,pDockWidget2,pDockWidget1->dockAreaWidget());ListWidget=new QListWidget(pDockWidget2);pDockWidget2->setWidget(ListWidget);connect(ListWidget,&QListWidget::currentItemChanged,this,[=](QListWidgetItem *current, QListWidgetItem *previous){int index=current->data(Qt::UserRole).toInt();onProjectChanged(index);});ads::CDockWidget* pDockWidget3=new ads::CDockWidget("测试页面2");m_pDockManger->addDockWidget(ads::RightDockWidgetArea,pDockWidget3,centerDockWidget->dockAreaWidget());mLabelTwo=new QLabel(pDockWidget3);pDockWidget3->setWidget(mLabelTwo);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_actionAdd_triggered()
{mProjectNum++;QListWidgetItem *item;item=new QListWidgetItem(ListWidget);item->setText(QString("项目%1").arg(mProjectNum));item->setData(Qt::UserRole,mProjectNum);ListWidget->addItem(item);itemHash.insert(mProjectNum,item);ListWidget->setCurrentItem(item);ads::CDockWidget* cDockWidget=new ads::CDockWidget(QString("中心页面%1").arg(mProjectNum));m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,cDockWidget,centerDockWidget->dockAreaWidget());centerHash.insert(mProjectNum,cDockWidget);ads::CDockWidget* bDockWidget=new ads::CDockWidget(QString("底部页面%1").arg(mProjectNum));m_pDockManger->addDockWidget(ads::CenterDockWidgetArea,bDockWidget,bottomDockWidget->dockAreaWidget());bottomHash.insert(mProjectNum,bDockWidget);QString msg=QString("当时是项目%1").arg(mProjectNum);mLabelOne->setText(msg);mLabelTwo->setText(msg);
}void MainWindow::onProjectChanged(int index)
{ListWidget->setCurrentItem(itemHash[index]);ads::CDockAreaWidget* centerArea=centerDockWidget->dockAreaWidget();centerArea->setCurrentDockWidget(centerHash[index]);ads::CDockAreaWidget* bottomArea=bottomDockWidget->dockAreaWidget();bottomArea->setCurrentDockWidget(bottomHash[index]);QString msg=QString("当时是项目%1").arg(index);mLabelOne->setText(msg);mLabelTwo->setText(msg);
}
相关文章:
Qt-Advanced-Docking-System示例程序
写了一些简单的示例程序,帮助我更好地使用和了解Qt-Advanced-Docking-System 1.写一个如图页面布局的程序 m_pDockMangernew ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidgetnew ads::CDockWidget("中…...
戴尔笔记本重装系统?笔记本卡顿失灵?一键重装系统!
随着科技的快速发展,笔记本电脑已成为我们日常生活和工作中不可或缺的工具。然而,随着时间的推移,笔记本可能会遇到各种问题,如系统卡顿、失灵等。这时,重装系统往往是一个有效的解决方案。本文将详细介绍如何在戴尔笔…...
ViewController 的常用跳转及返回方法
ViewController 的常用跳转及返回方法 ViewController 的常用跳转及返回方法模态跳转导航控制器选项卡控制器Storyboard 的 segues 方式跳转 ViewController 的常用跳转及返回方法 模态跳转 一个普通的视图控制器一般只有模态跳转的功能,这个方法是所有视图控制器…...
FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流
《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有于2017年推出的SRT协议,相比常见的RTMP协议,SRT协议具有更低的延迟,并且消…...
探索AI的巅峰:详解GPT-3.5与GPT-4系列模型的区别
人工智能领域不断涌现出令人惊叹的技术突破,其中OpenAI的ChatGPT系列模型尤为引人注目。随着GPT-4的发布,技术开发者们对比分析其与前一代GPT-3.5的差异显得尤为重要。本文将深入探讨GPT-3.5和GPT-4系列模型的主要区别,帮助大家更好地理解和应…...
Linux-笔记 使用SCP命令传输文件报错 :IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
前言 使用scp命令向开发板传输文件发生报错,报错见下图; 解决 rm -rf /home/<用户名>/.ssh/known_hosts 此方法同样适用于使用ssh命令连接开发板报错的情况。 参考 https://blog.csdn.net/westsource/article/details/6636096...
计算机网络 静态路由及动态路由RIP
一、理论知识 1.静态路由 静态路由是由网络管理员手动配置在路由器上的固定路由路径。其优点是简单和对网络拓扑变化不敏感,缺点是维护复杂、易出错,且无法自动适应网络变化。 2.动态路由协议RIP RIP是一种基于距离向量的动态路由协议。它使用跳数作…...
Django实现部门管理功能
在这篇文章中,我们将介绍如何使用Django框架实现一个简单的部门管理功能。这个功能包括部门列表展示、添加新部门、编辑和删除部门等操作。 1. 项目设置 首先,确保你已经安装了Django并创建了一个新的Django项目。在项目中,我们需要创建一个名为app01的应用。 2.…...
概率论与数理统计期末复习
概率论常考知识点汇总 总括 1. 基础概率论 概率定义:理解概率是事件发生的可能性度量,范围从0(不可能)到1(必然发生)。概率公理:掌握概率的三大公理,即非负性、规范性和可加性。条…...
python 识别图片点击,设置坐标,离设置坐标越近的优先识别点击
import pyautogui import cv2 import numpy as np import mathdef find_and_click(template_path, target_x, target_y, match_threshold0.8):"""在屏幕上查找目标图片并点击。Args:template_path: 目标图片的路径。target_x: 预设的坐标 x 轴值。target_y: 预设…...
【实战教程】如何使用JMeter来轻松测试WebSocket接口?
1、websocket接口原理 打开网页:从http协议,升级到websocket协议,请求建立websocket连接服务器返回建立成功成功客户端向服务端发送匹配请求服务端选择一个客服上线服务器返回客服id客户端向服务器发送消息服务器推送消息给指定的客服服务器…...
【linux】详解——库
目录 概述 库 库函数 静态库 动态库 制作动静态库 使用动静态库 如何让系统默认找到第三方库 lib和lib64的区别 /和/usr/和/usr/local下lib和lib64的区别 环境变量 配置相关文件 个人主页:东洛的克莱斯韦克-CSDN博客 简介:C站最萌博主 相关…...
RuntimeError: “exp_vml_cpu“ not implemented for ‘Half‘
遇到 "exp_vml_cpu" not implemented for Half 这个运行时错误,意味着你尝试在一个操作中使用了半精度(Half 或 float16)数据类型,但是该操作在当前环境下并没有针对半精度数据类型的实现。 半精度(float16&…...
JVM之双亲委派机制
1.双亲委派机制 在Java中,类加载器具有层次结构。每个Java实现的类加载器中保存了一个成员变量叫“父”类加载器(parent),可以理解为上级,并不是继承关系。应用程序类加载器的parent父加载器是扩展类加载器࿰…...
Gemalto SafeNet Luna HSM服务器硬件监控指标解读
在现代化的信息安全体系中,硬件安全模块(HSM)扮演着至关重要的角色,它负责保护和管理敏感的数据和密钥。Gemalto SafeNet Luna HSM作为一款高性能的硬件安全模块,广泛应用于金融、政府和企业等领域。为了确保Luna HSM的…...
计算机视觉与人工智能领域常用期刊和会议缩写
在撰写论文时有时候会面临超篇幅的情况,这时候一个常用的操作便是使用期刊(会议)的缩写或者半缩写来替换期刊(会议)全称 为了方便自己后续使用相关的缩写 特此整理 如有不当之处 欢迎大家指正~~ 计算机视觉与人工智能…...
ONLYOFFICE桌面编辑器8.1版:个性化编辑和功能强化的全面升级
ONLYOFFICE是一款全面的办公套件,由Ascensio System SIA开发。该软件提供了一系列与微软Office系列产品相似的办公工具,包括处理文档(ONLYOFFICE Document Editor)、电子表格(ONLYOFFICE Spreadsheet Editor࿰…...
用一个实例看如何分享大量照片 续篇二,关于Exif (Exchangeable Image File) - 可交换图像文件
续篇二:说说关于照片隐含的 Exif (Exchangeable Image File) 可交换图像文件 数码照片的Exif 参数有很多,重要的Exif信息:拍摄日期、时间、拍摄器材、GPS信息。 当然这主要对自己的档案有意义,如果放到网上还是建议抹去这些信息。…...
使用Python自动化收集和处理视频资源的教程
在这篇教程中,我们将介绍如何利用Python脚本自动化收集和处理视频资源。这篇文章将帮助您掌握基本的网络自动化技术,并使用相关库进行视频资源的获取和保存。以下是具体的实现步骤和代码示例。 环境准备 在开始之前,请确保您的工作环境中已…...
字节数组输出流转换为Base64方法记录
1. 今天在做字节数组转换Base64的时候遇到一个问题,转换成的Base64字符串自动换行,导致传输失败 关键代码: ByteArrayOutputStream out new ByteArrayOutputStream(); ............. BASE64Encoder encoder new BASE64Encoder(); Stri…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
