[Qt]窗口-QMainWindow类-QMenuBar、QToolBar、QStatusBar、QDockWidget控件
目录
1.QMainWindow类介绍
2.菜单栏-QMenuBar控件
创建菜单栏
添加菜单和菜单选项
triggered信号
设置快捷键
添加分割线
添加图标
使用案例
3.工具栏-QToolBar控件
使用介绍
设置停靠位置
设置浮动属性
设置移动属性
使用案例
4.状态栏-QStatusBar控件
状态栏的创建和设置
状态栏添加信息
状态栏嵌套控件
使用案例
5.浮动窗口-QDockWidget控件
浮动窗口的使用
浮动窗口停靠位置
浮动窗口添加多个控件案例
1.QMainWindow类介绍
我们之前学习的所有内容,都是基于QWidget这个类派生出来的各种控件。但是这些控件更多的时候是作为窗口的一部分。我们在创建项目的时候,选择的QMainWindow版本就是一个完整的窗口,是一个为用户提供窗口程序的类。当然也是继承与QWidget,但是是基于QWidget的基础上添加了菜单栏、多个工具栏、多个浮动窗口、状态栏以及一个中心部件。
QWidget版本的项目是不可以使用菜单栏等各种上述的内容的。
2.菜单栏-QMenuBar控件
Qt的菜单栏是通过QMenuBar这个类实现的,一个主窗口只能有一个菜单栏,但是菜单栏内部的菜单和选项是可以有多个的,每一个菜单是一个QMenu对象,每一个菜单选项是一个QAction对象。为什么不是QMenuItem呢?因为对于工具栏的功能来说和每一个菜单选项类似,所以说用一个统一的控件去实现两个栏的功能了。
创建菜单栏
有两种方法,第一种还是动态的在堆上创建一个QMenuBar对象,之后将菜单栏放入到窗口当中,第二种方法是使用QMainWindow类中提供的menuBar函数来创建菜单栏,之后同样也需要将菜单栏放入到窗口当中,这种方式不用手动的将菜单栏添加到对象树中。
QMenuBar* menuBar() const; //创建菜单栏函数
void setMenuBar(QMenuBar *menubar); //菜单栏设置到窗口
对于在创建菜单栏对象的时候会有两种情况,如果我们创建项目的时候没有勾选自动自动生成ui文件的话,是没有问题的。如果勾选了的话,qt会帮我们自动生成一个QMenuBar菜单栏对象,我们设置新的QMenuBar对象的话,就会导致旧的QMenuBar对象会脱离Qt的对象树,也就会导致我们无法对旧的QMenuBar就行释放操作,就会操作内存泄露了。
所以尽量还是使用第二种方式,执行的逻辑是如果有了就返回,没有的话再去创建之后再返回。
添加菜单和菜单选项
菜单是QMenu对象,菜单选项是QAction选项。
对于菜单也会有子菜单,子菜单中也可以有子菜单,那么对于QMenu类也是提供了addMenu的,可以在菜单中添加子菜单。当鼠标悬停到子菜单当中的时候,会展开子菜单。
QAction *addMenu(QMenu *menu); //添加菜单/子菜单
void addAction(QAction *action); //添加菜单选项
triggered信号
当我们创建完并设置好所有内容后,发现点击菜单项没有任何的反应,是因为系统也不知道我们要干什么,所以我们要自己去定义菜单选项对于的动作,用户点击菜单项之后,会触发一个QAction::trigged信号,我们定义这个信号的槽函数就好了。
设置快捷键
很简单,在设置菜单或者菜单选项文本的时候设置就可以了,在文本里面写上 &x 的格式就可以了。当然使用QShortCut来设置快捷键也是可以的。但是这么设置的话,就需要定义快捷键选项,然后设置快捷键对应的操作槽函数,很麻烦。这里括号带不带都可以。
这样设置的快捷键是要使用alt + x触发的。
QMenu* menu = new QMenu("文件 (&F)");
QAction* action = new QAction("新建文件 (&W)");
添加分割线
这个操作也很简单,就是调用QMenu类中提供的addSeperator函数即可。对于菜单选项展示的顺序是我们添加的顺序,我们可以把添加的分割线和他们看成一样的操作,也是根据顺序来进行的,所以如果我们想要在第二个和第三个菜单项之间添加分割线的话,就需要在第二个菜单项添加完毕之后添加分割线。
QAction *addSeparator();
添加图标
需要使用QIcon类,同时使用qrc机制这样会更好。 对于菜单、子菜单以及菜单选项都是可以设置图标的,但是对于菜单来说,设置图标的话,图标就把文本给覆盖了。因为主菜单的话是长在QMenuBar上的只提供了一个位置,而子菜单是长在菜单上的,会分别给图标和文本预留空间。
void setIcon(const QIcon &icon);
使用案例
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建菜单栏QMenuBar* menubar = this->menuBar();this->setMenuBar(menubar);// QMenuBar* menubar1 = new QMenuBar(this);
// this->setMenuBar(menubar1);//创建菜单QMenu* menu1 = new QMenu("文件 (&F)");QMenu* menu2 = new QMenu("编辑 (&E)");QMenu* menu3 = new QMenu("菜单1 (&B)");//创建子菜单QMenu* menu4 = new QMenu("子菜单1");QMenu* menu5 = new QMenu("子菜单2");//添加到菜单栏中menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);//子菜单添加到菜单中menu3->addMenu(menu4);menu3->addMenu(menu5);//创建菜单选项QAction* action1 = new QAction("新建");QAction* action2 = new QAction("退出");QAction* action3 = new QAction("Undo");QAction* action4 = new QAction("Redo");QAction* action5 = new QAction("菜单项1");QAction* action6 = new QAction("菜单项2");QAction* action7 = new QAction("菜单项3");QAction* action8 = new QAction("菜单项4");QAction* action9 = new QAction("菜单项5");QAction* action10 = new QAction("菜单项6");//将菜单选项添加到菜单中menu1->addAction(action1);menu1->addAction(action2);menu2->addAction(action3);menu2->addAction(action4);menu3->addAction(action5);menu3->addAction(action6);//将菜单选项添加到子菜单中menu4->addAction(action7);menu4->addSeparator(); //添加分割线menu4->addAction(action8);menu5->addAction(action9);menu5->addAction(action10);//添加action对应的槽函数connect(action1, &QAction::triggered, this, &MainWindow::handler);connect(action2, &QAction::triggered, this, &MainWindow::close); //MainWindow自带的close关闭函数//添加图标menu1->setIcon(QIcon(":/people.png"));menu4->setIcon(QIcon(":/people.png"));action7->setIcon(QIcon(":/people.png"));}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handler()
{qDebug() << "新建操作被触发了";
}
3.工具栏-QToolBar控件
工具栏是应用程序中继承各种功能实现的一个快捷的区域,是一个QToolBar控件对象,可以有多个工具栏也可以没有工具栏,并不是必须存在的。工具栏本身是一个可移动的控件,他的元素是由各种控件组成,通常是以图标形式展示的按钮。
使用介绍
创建直接在堆上创建即可,对于设置到窗口中这里并不是set开头的函数,而是add开头的,也暗示着菜单来只能设置一个,而工具栏可以一直添加。
void addToolBar(QToolBar *toolbar);
而对于工具栏的选项设置,也是QAction对象,所以跟添加菜单项的操作是一样的。对于工具栏和菜单栏通常是一起使用的,而且工具栏很多情况下是将菜单栏中的重要功能或者常用的功能在设置一遍,所以工具栏和菜单栏中的选项都是用QAction控件也可以让这种情况不用设置两个重复功能的不同控件了。
那么又会有问题了,一个QAction对象即是菜单栏的选项又是工具栏的选项,那么在对象树释放的时候,不会重复释放两吗,肯定不会的,可以使用引用计数,或者释放之前判断一下都可以解决该问题。
对于工具栏的QAction对象设置,它默认会帮我们也生成一个该QAction控件的toolTip属性。如果设置的是图标,那么也会覆盖文本,但是会以toolTip的方式展现出来。也可以自己手动刷设置。
void setToolTip(const QString &tip);
设置停靠位置
工具栏不同于窗口标题和菜单栏内容,他是可以设置在上下左右四个位置的,所以就对应有了工具栏的停靠位置这个属性。
Qt::LeftToolBarArea | 停靠在左侧 |
Qt::RightToolBarArea | 停靠在右侧 |
Qt::TopToolBarArea | 停靠在顶部 |
Qt::BottomToolBarArea | 停靠在底部 |
Qt::AllToolBarArea | 以上四个位置都可以停靠 |
如何设置呢?有两种方式,第一种是在将工具栏添加到窗口的时候通过参数设置,第二种方法是通过调用QToolBar类内部的接口设置。
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void setAllowedAreas(Qt::ToolBarAreas areas);
但是二者也是有区别的,对于设置到窗口的时候设置的停靠位置是,该工具栏默认的停靠位置,而使用setAllowedAreas函数设置的停靠位置则是工具栏只能在的位置。通过allowedAreas函数也可以获取到工具栏允许停靠的区域。
设置浮动属性
浮动状态就是工具栏可以放在任意的位置,如果不能浮动的话,就只能放在边上。工具栏的浮动属性可以使用QToolBar类中的setFloatable函数进行设置的。
void setFloatable(bool floatable);
设置移动属性
如果设置为不可移动的话,就相当于把工具栏订死在设定的位置了,不可以移动更不可以浮动了。
void setMoveable(bool moveable);
使用案例
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建工具栏对象QToolBar* toolbar1 = new QToolBar();QToolBar* toolbar2 = new QToolBar();//设置到窗口中this->addToolBar(toolbar1); //停靠位置默认为左侧this->addToolBar(Qt::LeftToolBarArea, toolbar2);//创建工具栏选项QAction* action1 = new QAction("动作1");QAction* action2 = new QAction("动作2");QAction* action3 = new QAction("动作3");QAction* action4 = new QAction("动作4");//添加到工具栏toolbar1->addAction(action1);toolbar1->addAction(action2);toolbar2->addAction(action3);toolbar2->addAction(action4);//设置工具栏1可以停靠的位置toolbar1->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);//设置浮动属性toolbar1->setFloatable(true);toolbar2->setFloatable(true);//设置工具栏2不可以移动toolbar2->setMovable(false);
}
4.状态栏-QStatusBar控件
对于状态栏是应用程序输出一些简要信息的区域,一般是位于主窗口的底部区域,一个窗口最多也只能有一个状态栏,在Qt中,状态栏是由QStatisBar控件类实现的。
状态栏的创建和设置
因为一个窗口只能由一个状态栏,而且Qt会帮我们自动的创建一个状态栏,所以说他的创建和菜单栏类似,可以调用窗口的statusBar函数来获取状态栏,如果有的话就返回状态栏对象,如果没有的话就创建之后在返回状态栏对象。
void setStatusBar(QStatusBar *statusbar);
状态栏添加信息
状态栏是用于输出一些简单信息的,这些信息可以分为三类,第一类是实时信息,可以显示一些程序执行的进度或执行的一些操作等提示信息,这类信息不会一直存在,而是会有一定的期限。第二类是永久信息,可以显示一些版本号、机构等内容,这类信息会永久存在。第三类就是进度信息,可以显示一些进度条提示等等内容,会随着任务的进度而动态变化。
对于实时信息和永久信息可以使用showMessage函数去设置,当timeout不传参数或者传递为0的时候,就表示永久消息,该时间的单位是ms级别的。
void showMessage(const QString &text, int timeout = 0);
状态栏嵌套控件
对于信息也就是文本,所以可以添加label控件来显示文本信息。添加控件的函数QStatusBar类中提供了两种,第一种是从左向右添加,第二种则相反。第一个参数是控件,第二个参数是拉伸系数。当然不仅仅是可以添加label控件,而是可以添加任何控件,例如进度条、按钮、时间等控件。
void addWidget(QWidget *widget, int stretch = 0);
void addPermanentWidget(QWidget *widget, int stretch = 0);
使用案例
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStatusBar>
#include <QLabel>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建状态栏QStatusBar* statusbar = this->statusBar();this->setStatusBar(statusbar);//添加信息
// statusbar->showMessage("提示信息", 3000);QLabel* label1 = new QLabel("左面的提示信息");QLabel* label2 = new QLabel("右面的提示信息");//添加控件statusbar->addWidget(label1);statusbar->addPermanentWidget(label2);
}MainWindow::~MainWindow()
{delete ui;
}
5.浮动窗口-QDockWidget控件
在Qt中浮动窗口也称为铆接部件,也可以说是作为子窗口的存在。
浮动窗口的使用
在Qt中浮动窗口是由QCockWidget控件实现的,可以在堆上动态创建多个浮动窗口,在创建的时候可以设置浮动窗口的文本。创建和设置到窗口的操作和工具栏是类似的。在设置浮动窗口到窗口的时候需要指明浮动窗口的位置,该位置参数和状态栏的类似。
explicit QDockWidget(const QString &title, QWidget *parent = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags());
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget);
对于浮动窗口内部的内容,我们可以像浮动窗口里添加控件,可以直接添加,但是只能添加一个控件,如果我们想要添加多个控件的话,需要先创建一个QWidget窗口,之后所有的控件都设置到QWidget中,然后将QWidget添加到浮动窗口中。
void setWidget(QWidget *widget);
浮动窗口停靠位置
Qt::LeftDockWidgetArea | 停靠在左侧 |
Qt::RightDockWidgetArea | 停靠在右侧 |
Qt::TopDockWidgetArea | 停靠在顶部 |
Qt::BottomDockWidgetArea | 停靠在底部 |
Qt::AllDockWidgetArea | 以上四个位置都可以停靠 |
浮动窗口添加多个控件案例
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QPushButton>
#include <QVBoxLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建浮动窗口QDockWidget* dockwidget1 = new QDockWidget("浮动窗口1");QDockWidget* dockwidget2 = new QDockWidget("浮动窗口2");this->addDockWidget(Qt::LeftDockWidgetArea, dockwidget1);this->addDockWidget(Qt::LeftDockWidgetArea, dockwidget2);//添加控件到浮动窗口中QPushButton* button1 = new QPushButton("按钮1");dockwidget1->setWidget(button1);//创建窗口QWidget* container = new QWidget();//创建布局管理器QVBoxLayout* layout = new QVBoxLayout();container->setLayout(layout);//创建其他控件QPushButton* button2 = new QPushButton("按钮2");QPushButton* button3 = new QPushButton("按钮3");QPushButton* button4 = new QPushButton("按钮4");//将控件添加到布局管理器中layout->addWidget(button2);layout->addWidget(button3);layout->addWidget(button4);dockwidget2->setWidget(container);
}MainWindow::~MainWindow()
{delete ui;
}
相关文章:
[Qt]窗口-QMainWindow类-QMenuBar、QToolBar、QStatusBar、QDockWidget控件
目录 1.QMainWindow类介绍 2.菜单栏-QMenuBar控件 创建菜单栏 添加菜单和菜单选项 triggered信号 设置快捷键 添加分割线 添加图标 使用案例 3.工具栏-QToolBar控件 使用介绍 设置停靠位置 设置浮动属性 设置移动属性 使用案例 4.状态栏-QStatusBar控件 状…...
Linux命令行工具-使用方法
参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…...
HTML中如何保留字符串的空白符和换行符号的效果
有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} , HTML中想要保留 \n的换行效果的有下面3种方法: 1、style 中 设置 white-space: pre-lin…...
ASP.NET Core WebApi接口IP限流实践技术指南
在当今的Web开发中,接口的安全性和稳定性至关重要。面对恶意请求或频繁访问,我们需要采取有效的措施来保护我们的WebApi接口。IP限流是一种常见的技术手段,通过对来自同一IP地址的请求进行频率控制,可以有效地防止恶意攻击和过度消…...
SparkSQL数据模型综合实践
文章目录 1. 实战概述2. 实战步骤2.1 创建数据集2.2 创建数据模型对象2.2.1 创建常量2.2.2 创建加载数据方法2.2.3 创建过滤年龄方法2.2.4 创建平均薪水方法2.2.5 创建主方法2.2.6 查看完整代码 2.3 运行程序,查看结果 3. 实战小结 1. 实战概述 在本次实战中&#…...
C++实现设计模式---外观模式 (Facade)
外观模式 (Facade) 外观模式 是一种结构型设计模式,为子系统中的一组接口提供一个一致的界面。外观模式定义了一个更高层次的接口,使得子系统更容易使用。 意图 简化复杂子系统的接口。为客户端提供一个统一的入口,屏蔽子系统的内部细节。 …...
计算机网络 (43)万维网WWW
前言 万维网(World Wide Web,WWW)是Internet上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统。 一、基本概念与组成 定义:万维网是一个分布式、联机式的信息存储空间,通过超文本链接的方式将分散的信息…...
C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等
在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…...
Docker Desktop 中安装 MySQL 并开启远程访问的详细教程
是在 Docker Desktop 中安装 MySQL 并开启远程访问的详细教程: 一、安装 MySQL 容器 拉取 MySQL 镜像: docker pull mysql:latest这将从 Docker Hub 上拉取最新版本的 MySQL 镜像。如果你想使用特定版本的 MySQL,可以将 latest 替换为具体…...
沸点 | 聚焦嬴图Cloud V2.1:具备水平可扩展性+深度计算的云原生嬴图动力站!
近日,嬴图正式推出嬴图Cloud V2.1,此次发布专注于提供无与伦比的用户体验,包括具有水平可扩展性的嬴图Powerhouse的一键部署、具有灵活定制功能的管理控制台、VPC / 专用链接等,旨在满足用户不断变化需求的各项前沿功能࿰…...
西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】
AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…...
EMQX集群搭建
集群搭建 通过使用 EMQX 集群,您可以在一个或多个节点发生故障时仍然保持集群运行,从而享受到容错和高可用性的好处。 尽管没有严格的上限,但建议在 EMQX 开源版中将集群大小限制为三个节点。仅使用核心类型节点时,较小的集群规模…...
【Flink系列】10. Flink SQL
10. Flink SQL Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理(…...
Java安全—SPEL表达式XXESSTI模板注入JDBCMyBatis注入
前言 之前我们讲过SpringBoot中的MyBatis注入和模板注入的原理,那么今天我们就讲一下利用以及发现。 这里推荐两个专门研究java漏洞的靶场,本次也是根据这两个靶场来分析代码,两个靶场都是差不多的。 https://github.com/bewhale/JavaSec …...
TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG
注:本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层,有个 FLAGS 字段,这个字段有…...
OSPF的LSA的学习研究
OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图,按照地址表配置,激活OSPF划分相关区域并宣告相关网段 2、1类LSA,每台运行了OSPF的路由器都会产生,描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa࿰…...
C# OpenCV机器视觉:转速测量
在一个看似平常却又暗藏神秘能量的日子里,阿杰正在他那充满科技感的实验室里,对着一堆奇奇怪怪的仪器发呆。突然,手机铃声如一道凌厉的剑气划破寂静,原来是工厂的赵厂长打来的紧急电话:“阿杰啊,咱们工厂新…...
wireshark 网络分析工具
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一、网络截获数据包的基础1、以太网…...
XXL-JOB 加入 GitCode:推动分布式任务调度进阶发展
在当今企业数字化转型加速的时代背景下,任务调度在保障系统高效运行方面的关键作用日益凸显。XXL-JOB 正式加入 GitCode,成为 G-Star 优秀毕业项目,为分布式任务调度领域带来了新的契机与活力,助力企业应对复杂多变的业务需求。 X…...
Java Web开发进阶——WebSocket与实时通信
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,广泛应用于需要实时数据交换的应用程序中。它能够实现服务器与客户端之间的双向通信,避免了传统 HTTP 请求/响应的延迟。结合 Spring Boot,开发实时通信应用变得更加高效与简便。 1. …...
解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题
解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one(青柠学术插件)的时候,使用插件跳转obsidian中的对应笔记,出现上图情况。(错误中提到的…...
晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版
晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...
分布式数据存储基础与HDFS操作实践(副本)
以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统(HDFS)的基本操作。 …...
Rust:指针 `*T` 和引用 `T`的区别
在 Rust 编程语言中,*T 和 &T 是两种不同类型的指针,它们各自代表了不同的内存访问方式和所有权模型。 *T(原始指针或裸指针): *T 是一个原始指针(也称为裸指针或裸引用),它可以…...
【2025最新版】PCL点云处理算法汇总(C++长期更新版)
博客长期更新,最近一次更新时间为:2025年1月17日。 pcl::copyPointCloud(*cloud, indicesY, *cloud_yboundary);目录 配库常用数据免费下载链接一、点云滤波1、常用滤波器2、采样滤波3、裁剪滤波 二、KD树与八叉树1、KD树2、八叉树 三、点云配准粗配准精…...
换了城市ip属地会变吗?为什么换了城市IP属地不变
当我们跨越城市的界限,从一个地方迁移到另一个地方时,许多日常使用的网络服务和应用程序都会感知到这种变化,其中一个显著的现象就是IP属地的变化。IP属地,即IP地址所在的地理位置信息,它通常与互联网服务提供商&#…...
mysql 如何快速删除表数据
在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...
Windows安装Jenkins——及修改主目录、配置简体中文、修改插件源
一、简介 Jenkinshttps://www.jenkins.io/zh/ Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。 二、Windows安装配置Jenkins2.479 2.1、J...
【机器学习:二十二、机器学习项目开发的技巧】
机器学习项目开发的技巧 机器学习项目的开发不仅仅依赖于算法的选择和模型的调优,还需要良好的项目管理技巧和方法论。以下是机器学习项目开发中的关键技巧: 明确需求:在项目启动之前,明确问题定义和业务目标。例如,…...
用python实战excel和word自动化
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现excel和word自动化--批量处理 前言--需求快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格…...
Conda的一些常用命令
以下是Conda的一些常用命令: pip freeze > requirements.txt pip install -r requirements.txt 基本信息查看类 查看conda版本: conda -V 或 conda --version 可以查看当前安装的conda版本。 查看conda帮助信息: conda -h 或 conda --he…...
ESP8266 AP模式 网页配网 arduino ide
ESP8266的AP配网,可以自行配置网络,一个简单的demo,文档最后有所有的代码,已经测试通过. 查看SPIFFS文件管理系统中的文件 账号密码是否存在,如不存在进入AP配网,如存在进入wifi连接模式 // 检查Wi-Fi凭据if (isWiFiConfigured()) {Serial.println("找到Wi-Fi凭据&#…...
《AI与鸿蒙Next:建筑设计可视化的革新力量》
在建筑设计领域,可视化对于呈现设计理念、与客户沟通以及指导施工等环节都至关重要。人工智能与鸿蒙Next图形渲染技术的发展,为建筑设计可视化带来了前所未有的变革与机遇。 人工智能在建筑设计可视化中的作用 快速生成设计方案:人工智能可以…...
Edge Scdn是什么,它如何提升网站安全性与访问速度?
随着网络攻击的日益猖獗,尤其是分布式拒绝服务(DDoS)攻击的频繁发生,如何保护网站的安全性并确保用户的访问体验变得极为重要。Edge Scdn(内容分发网络)作为一种新兴的技术方案,逐渐被越来越多的…...
[Collection与数据结构] PriorityQueue与堆
1. 优先级队列 1.1 概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然…...
C#调用OpenCvSharp实现图像的开运算和闭运算
对图像同时进行腐蚀和膨胀操作,顺序不同则效果也不同。先腐蚀后膨胀为开运算,能够消除小斑点和细小的突出物、平滑图像以及改善边缘;先膨胀后腐蚀为闭运算,能够去除噪点、填补图像孔洞、连接邻近物体和平滑物体边界。 OpenCvS…...
okhttp断点续传
使用 OkHttp 实现断点续传,关键是通过设置 Range 请求头向服务器请求文件的部分内容。下面是详细的实现步骤和示例代码。 步骤 获取文件的总大小:在开始下载前,通常需要知道文件的总大小,可以通过发送一个初始请求来获取。记录已…...
异步 HTTP 请求
fetch 是一个用于进行异步 HTTP 请求的 JavaScript API。 fetch 基本用法 // 使用 fetch 进行 GET 请求 fetch(https://api.example.com/data).then(response > {// 检查响应是否成功if (!response.ok) {throw new Error(Network response was not ok);}// 解析响应数据为…...
仿射密码实验——Python实现(完整解析版)
文章目录 前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块 实验结果实验心得实验源码scirpt.pyusefile.py 前言 实验目的 1)初步了解古典密码 2)掌握仿射密码的实现 实验方法 根据下图仿射密码(变换…...
Ubuntu安装K8S
第一步: 安装docker Install Docker #注意docker是早期的名称已经过时了,因此请使用如下命令,一步到位安装docker-ce。 第二步:设置K8S源: (大陆使用aliyun源,大陆外使用google源)…...
C语言初阶习题【29】杨氏矩阵
1. 题目描述——杨氏矩阵 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N); 2. 思路 3. 代码实现1 #include<stdio.h>void fin…...
(01)FreeRTOS移植到STM32
一、以STM32的裸机工程模板 任意模板即可 二、去官网上下载FreeRTOS V9.0.0 源码 在移植之前,我们首先要获取到 FreeRTOS 的官方的源码包。这里我们提供两个下载 链 接 , 一 个 是 官 网 : http://www.freertos.org/ , 另…...
从AI生成内容到虚拟现实:娱乐体验的新边界
引言 在快速发展的科技时代,娱乐行业正经历一场前所未有的变革。传统的娱乐方式正与先进技术融合,创造出全新的沉浸式体验。从AI生成的个性化内容,到虚拟现实带来的身临其境的互动场景,科技不仅改变了我们消费娱乐的方式…...
买入的股票
银行12 工商,建设,农业,中国,招商,交通,邮储,中信,兴业,浦发,平安,光大 保险4:人寿,平安,太平洋,…...
Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包,旨在简化与 Redis 的交互,包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖: <…...
如何在 Rocky Linux 上安装极狐GitLab?
本文分享如何在 Rocky Linux 操作系统上安装极狐GitLab。 相关资料 极狐GitLab 在各种操作系统下的安装指南官网文档 前提条件 一个安装了 Rocky Linux 操作系统的云服务器 可以查看 /etc/os-release 中的信息,确认操作系统信息: NAME"Rocky …...
50.【8】BUUCTF WEB HardSql
进入靶场 随便输输 上order by ????????,被过滤了,继续找其他也被过滤的关键字 #,-- -,-- 都不行,尝试其他特殊字符后发现and,union,select,空格,都被过滤了 如下 我就不知…...
Shell的运行原理以及Linux中的权限问题
Shell的运行原理 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如…...
Maven在Win10上的安装教程
诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要,也可以从官网下载: 第一步:解压文件 第二步:设置环境变量 在系统变量处点击新建,输入变量名MAVEN_HOME,变量值为解压路径: 在系统变…...
服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例
服务器数据恢复环境&故障: EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘(520字节)。21块盘组建了2组RAID6:一组有11块硬盘,一组有10块硬盘。 在存储运行过程中,管理员误操作删除了 2组…...