Qt 窗口MainWindow(上)

Qt 窗口是通过 QMainWindow 类来实现的

QMainWindow 是一个为用户提供主窗口程序的类,继承自 QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含一个菜单栏(menubar)多个工具栏(toolbars)多个浮动窗口(铆接部件)(dockwidgets)一个状态栏(statusbar)和一个中心部件(centralwidget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。如下图为 QMainwindow 中各组件所处的位置:

在这里插入图片描述

菜单栏(MenuBar)

Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题下面。

菜单栏中包含菜单.菜单中包含菜单项.

在这里插入图片描述

创建菜单栏

方式一:菜单栏的创建可以借助于 QMainWindow 类提供的 menuBar() 函数来实现。menubar() 函数原型如下:

QMenuBar * menuBar() const
//创建菜单栏
QMenuBar *menubar = menuBar();
//将菜单栏放入窗口中
this->setMenuBar(menubar);

方式二:在堆上动态创建;

QMenuBar *menubar = new QMenuBar(this);
this->setMenuBar(menubar);

使用 setMenuBar 把菜单栏放到窗口中.

在菜单栏中添加菜单

创建菜单,并通过 QMenu 提供的 addMenu() 函数来添加菜单。

示例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QMenuBar *menubar = new QMenuBar(this);this->setMenuBar(menubar);   QMenu *menu1 = new QMenu("文件");QMenu *menu2 = new QMenu("编辑");QMenu *menu3 = new QMenu("构建");menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);
}

mainwindow创建的时候菜单栏默认会创建,所以是setMenuBar,而不是addMenuBar

效果如下

在这里插入图片描述

创建菜单项

在 Qt 中,并没有专门的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜单项.

QAction 可以给菜单栏使用, 也可以给工具栏使用.

示例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QMenuBar *menubar = new QMenuBar(this);this->setMenuBar(menubar);QMenu *menu1 = new QMenu("文件");QMenu *menu2 = new QMenu("编辑");QMenu *menu3 = new QMenu("构建");menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);//创建菜单项QAction *act1 = new QAction("open");QAction *act2 = new QAction("close");QAction *act3 = new QAction("create");//将菜单项添加到菜单上menu1 ->addAction(act1);menu1 ->addAction(act2);menu1 ->addAction(act3);
}

效果如下

在这里插入图片描述

在菜单栏之间添加分割线

在菜单项之间可以添加分割线。分割线如下图所示,添加分割线是通过 QMenu 类提供的 addSeparator() 函数来实现;

示例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QMenuBar *menubar = new QMenuBar(this);this->setMenuBar(menubar);QMenu *menu1 = new QMenu("文件");QMenu *menu2 = new QMenu("编辑");QMenu *menu3 = new QMenu("构建");menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);//创建菜单项QAction *act1 = new QAction("open");QAction *act2 = new QAction("close");QAction *act3 = new QAction("create");//将菜单项添加到菜单上menu1 ->addAction(act1);menu1->addSeparator();   //在open和close之间添加分割线menu1 ->addAction(act2);menu1->addSeparator();menu1 ->addAction(act3);menu1->addSeparator();
}

在这里插入图片描述

综合示例

在窗口上创建一个菜单栏,在菜单栏中添加一些菜单,在某一个菜单中添加一些菜单项。

1、新建 Qt 项目

注意:此时新建项目时选择的基类 QMainwindow ,如下图示:

在这里插入图片描述

2、在 “mainwindow.cpp” 文件中创建菜单和中央控件

  • 创建一个菜单栏, 一个菜单.
  • 两个菜单项: 保存, 加载
  • 创建一个 QTextEdit 作为窗口的中央控件.
class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void save();void load();private:Ui::MainWindow *ui;QTextEdit* edit;
};MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置标题this->setWindowTitle("我的记事本");// 创建菜单栏QMenuBar* menuBar = new QMenuBar(this);this->setMenuBar(menuBar);// 创建菜单QMenu* menu = new QMenu("文件");menuBar->addMenu(menu);// 创建菜单项QAction* action1 = new QAction("保存");QAction* action2 = new QAction("加载");menu->addAction(action1);menu->addAction(action2);// 创建中央控件edit = new QTextEdit(this);this->setCentralWidget(edit);edit->setPlaceholderText("此处编写⽂本内容...");
}

3、给 action 添加一些动作

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置标题this->setWindowTitle("我的记事本");// 创建菜单栏QMenuBar* menuBar = new QMenuBar(this);this->setMenuBar(menuBar);// 创建菜单QMenu* menu = new QMenu("文件");menuBar->addMenu(menu);// 创建菜单项QAction* action1 = new QAction("保存");QAction* action2 = new QAction("加载");QAction* action3 = new QAction("退出");menu->addAction(action1);menu->addAction(action2);menu->addAction(action3);// 创建中央控件edit = new QTextEdit(this);this->setCentralWidget(edit);edit->setPlaceholderText("此处编写⽂本内容...");// 连接信号槽, 点击 action 时触发⼀定的效果.connect(action1, &QAction::triggered, this, &MainWindow::save);connect(action2, &QAction::triggered, this, &MainWindow::load);connect(action3, &QAction::triggered, this, &MainWindow::close);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::save()
{// 弹出对话框, 选择写⼊⽂件的路径QFileDialog* dialog = new QFileDialog(this);QString fileName = dialog->getSaveFileName(this, "保存⽂件");qDebug() << "fileName: " << fileName;// 写⼊⽂件std::ofstream file(fileName.toStdString().c_str());if (!file.is_open()) {qDebug() << "⽂件保存失败!";return;}const QString& text = edit->toPlainText();file << text.toStdString();file.close();
}void MainWindow::load()
{// 弹出对话框, 选择打开的⽂件QFileDialog* dialog = new QFileDialog(this);QString fileName = dialog->getOpenFileName(this, "加载⽂件");qDebug() << "fileName: " << fileName;// 读取⽂件std::ifstream file(fileName.toStdString().c_str());if (!file.is_open()) {qDebug() << "⽂件加载失败!";return;}std::string content;std::string line;while (std::getline(file, line)) {content += line;content += "\n";}file.close();// 显⽰到界⾯上QString text = QString::fromStdString(content);edit->setPlainText(text);
}

执行程序, 可以看到此时就可以通过程序来保存/加载文件了. 并且对文件进行编辑

在这里插入图片描述

在这里插入图片描述

工具栏(ToolBar)

工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,它并不是应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。如下图为工具栏的示意图:

在这里插入图片描述

创建工具栏

调用 QMainWindow 类的 addToolBar() 函数来创建工具栏,每增加一个工具栏都需要调用一次该函数。

如添加两个工具栏:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar *toolBar1 = new QToolBar(this);QToolBar *toolBar2 = new QToolBar(this);this->addToolBar(toolBar1);this->addToolBar(toolBar2);
}

设置停靠位置

工具栏停靠位置的设置有两种方式。一种是在创建工具栏的同时指定停靠的位置,另一种是通过 QToolBar 类提供的 **setAllowedAreas() **函数来设置。

方式一:创建工具栏的同时指定其停靠的位置。

在创建工具栏的同时,也可以设置工具栏的位置,其默认位置是在窗口的最上面;如上述代码,默认在最上面显示。工具栏允许停靠的区域由 QToolBar 类提供的 allowAreas() 函数决定,其中可以设置的位置包括:

  • Qt::LeftToolBarArea 停靠在左侧
  • Qt::RightToolBarArea 停靠在右侧
  • Qt::TopToolBarArea 停靠在顶部
  • Qt::BottomToolBarArea 停靠在底部
  • Qt::AllToolBarAreas 以上四个位置都可停靠

示例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar *toolBar1 = new QToolBar(this);QToolBar *toolBar2 = new QToolBar(this);//创建工具栏的同时,指定工具栏在左侧显示this->addToolBar(Qt::LeftToolBarArea, toolBar1);//右侧显示this->addToolBar(Qt::RightToolBarArea, toolBar2);
}

方式二:使用 QToolBar 类提供的 setAllowedAreas()函数设置停靠位置。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar *toolBar1 = new QToolBar(this);QToolBar *toolBar2 = new QToolBar(this);this->addToolBar(toolBar1);this->addToolBar(toolBar2);//只允许在左侧停靠toolBar1->setAllowedAreas(Qt::LeftToolBarArea);//只允许在右侧停靠toolBar2->setAllowedAreas(Qt::RightToolBarArea);
}

说明: 在创建工具栏的同时指定其停靠的位置,指的是程序运行时工具栏默认所在的位置;而使用 setAllowedAreas()函数设置停靠位置,指的是工具栏允许其所能停靠的位置。

设置浮动属性

工具栏的浮动属性可以通过 QToolBar 类提供的 setFloatable() 函数来设置。setFloatable() 函数原型为:

void setFloatable (bool floatable)

参数

  • true:浮动
  • false:不浮动

示例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar *toolBar1 = new QToolBar(this);QToolBar *toolBar2 = new QToolBar(this);this->addToolBar(Qt::LeftToolBarArea,toolBar1);this->addToolBar(Qt::RightToolBarArea,toolBar2);toolBar1->setFloatable(true);  //允许工具栏浮动toolBar2->setFloatable(false);  //禁止工具栏浮动
}

设置移动属性

设置工具栏的移动属性可以通过 QToolBar 类提供的 setMovable() 函数来设置。**setMovable() **函数原型为:

void setMovable(bool movable)

参数:

  • true:移动
  • false:不移动

说明:若设置工具栏为不移动状态,则设置其停靠位置的操作就不会生效,所以设置工具栏的移动属性类似于总开关的效果。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar *toolBar1 = new QToolBar(this);QToolBar *toolBar2 = new QToolBar(this);this->addToolBar(Qt::LeftToolBarArea,toolBar1);this->addToolBar(Qt::RightToolBarArea,toolBar2);toolBar1->setMovable(true);  //允许移动toolBar2->setMovable(false);  //不允许移动
}

综合示例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);resize(800,600); //设置窗口大小QToolBar *toolBar = new QToolBar(this);//设置工具栏的位置:默认在窗口的上面,此处设置为在左侧addToolBar(Qt::LeftToolBarArea,toolBar);//设置工具栏的停靠位置,设置工具栏只允许在左右停靠toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);//设置工具栏的浮动属性toolBar->setFloatable(false);//设置工具栏的移动(总开关)toolBar->setMovable(false);//设置工具栏的内容QAction *openAction = new QAction("open" ,this);QAction *newAction = new QAction("new", this);toolBar->addAction(openAction);toolBar->addSeparator();toolBar->addAction(newAction);//工具栏也可以添加控件QPushButton *btn = new QPushButton("保存",this);toolBar->addWidget(btn);
}

状态栏(StatusBar)

状态栏是应用程序中输出简要信息的区域。一般位于主窗口的最底部,一个窗口中最多只能有一个状态栏。在 Qt 中,状态栏是通过 QStatusBar 类来实现的。 在状态栏中可以显示的消息类型有:

  • 实时消息:如当前程序状态
  • 永久消息:如程序版本号,机构名称
  • 进度消息:如进度条提示,百分百提示

状态栏的创建

状态栏的创建是通过 QStatusBar 类提供的 statusBar() 函数来创建;示例如下:

//创建状态栏
QStatusBar *stbr = this->statusBar();
//将状态栏置于窗口中
this->setStatusBar(stbr);

在状态栏中显示实时消息

在状态栏中显示实时消息是通过 showMessage() 函数来实现,示例如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建状态栏QStatusBar *stbr = this->statusBar();//将状态栏置于窗口中setStatusBar(stbr);//状态栏中显示大约2秒的 "hello world"stbr->showMessage("Hello World", 2000);
}

在状态栏中显示永久消息

在状态栏中可以显示永久消息,此处的永久消息是通过标签来显示的;示例如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建状态栏QStatusBar *stbr = this->statusBar();//将状态栏置于窗口中setStatusBar(stbr);//创建标签QLabel *label = new QLabel("提示信息",this);//将标签放入状态栏中stbr->addWidget(label);
}

显示效果如下:

在这里插入图片描述

调整显示消息的位置

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建状态栏QStatusBar *stbr = this->statusBar();//将状态栏置于窗口中setStatusBar(stbr);//创建标签QLabel *label = new QLabel("提示信息",this);//将标签放入状态栏中stbr->addWidget(label);//将创建的标签放入到状态栏的右侧QLabel *label2 = new QLabel("右侧提示信息",this);stbr->addPermanentWidget(label2);
}

显示效果如下:

在这里插入图片描述

浮动窗口(DockWidget)

在 Qt 中,浮动窗口也称之为铆接部件。浮动窗⼝是通过 QDockWidget 类来实现浮动的功能。浮动窗口一般是位于核心部件的周围,可以有多个

浮动窗口的创建

浮动窗口的创建是通过 **QDockWidget **类提供的构造方法 QDockWidget() 函数动态创建的;示例如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//浮动窗口QDockWidget *dockwidget = new QDockWidget("浮动窗口",this);//将浮动窗口置于当前窗口中this->addDockWidget(Qt::BottomDockWidgetArea,dockwidget);
}

设置停靠的位置

浮动窗口是位于中心部件的周围。可以通过 QDockWidget 类中提供 setAllowedAreas() 函数设置其允许停靠的位置。其中可以设置允许停靠的位置有:

  • Qt::LeftDockWidgetArea 停靠在左侧
  • Qt::RightDockWidgetArea 停靠在右侧
  • Qt::TopDockWidgetArea 停靠在顶部
  • Qt::BottomDockWidgetArea 停靠在底部
  • Qt::AllDockWidgetAreas 以上四个位置都可停靠

示例如下:设置浮动窗口只允许上下停靠

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//浮动窗口QDockWidget *dockwidget = new QDockWidget("浮动窗口",this);//将浮动窗口置于当前窗口中this->addDockWidget(Qt::BottomDockWidgetArea,dockwidget);//设置浮动窗口的停靠区域,只允许上下停靠dockwidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
}

效果如下

数设置其允许停靠的位置。其中可以设置允许停靠的位置有:

  • Qt::LeftDockWidgetArea 停靠在左侧
  • Qt::RightDockWidgetArea 停靠在右侧
  • Qt::TopDockWidgetArea 停靠在顶部
  • Qt::BottomDockWidgetArea 停靠在底部
  • Qt::AllDockWidgetAreas 以上四个位置都可停靠

示例如下:设置浮动窗口只允许上下停靠

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//浮动窗口QDockWidget *dockwidget = new QDockWidget("浮动窗口",this);//将浮动窗口置于当前窗口中this->addDockWidget(Qt::BottomDockWidgetArea,dockwidget);//设置浮动窗口的停靠区域,只允许上下停靠dockwidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
}

效果如下

在这里插入图片描述

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

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

相关文章

第十四届蓝桥杯JavaA组省赛真题 - 特殊日期

解题思路&#xff1a; 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…

安防监控视频汇聚平台EasyCVR启用图形验证码之后如何调用login接口?

视频综合管理平台EasyCVR视频监控系统支持多协议接入、兼容多类型设备&#xff0c;平台可以将区域内所有部署的监控设备进行统一接入与集中汇聚管理&#xff0c;实现对监控区域的实时高清视频监控、录像与存储、设备管理、云台控制、语音对讲、级联共享等&#xff0c;在监控中心…

【Vue】可拖拽侧边栏实现

在本篇博客中&#xff0c;我们将探讨如何在 Vue.js 项目中实现一个可拖拽的侧边栏。此功能可以通过修改 HTML 和 Vue 组件的脚本来实现。 首先&#xff0c;我们需要在 HTML 文件中定义侧边栏的容器和用于拖拽的元素。在 Vue 组件中&#xff0c;我们将使用 Vue 的响应式系统来追…

力扣73. 矩阵置零

Problem: 73. 矩阵置零 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a;利用一个等大的矩阵判定 复制一个与原始矩阵一样大的矩阵temp&#xff0c;遍历temp时若temp[i][j] 0&#xff0c;则将martix对应的行与列均设置为0 思路2&#xff1a;利用两个一维矩阵…

【Linux】UnixBench介绍、分数调优思路以及测试2D3D的方法

一.简介 unixbench是一个用于测试unix系统性能的工具&#xff0c;也是一个比较通用的benchmark&#xff0c; 此测试的目的是对类Unix 系统提供一个基本的性能指示&#xff0c;很多测试用于系统性能的不同方面&#xff0c;这些测试的结果是一个指数值&#xff08;index value&am…

幻兽帕鲁服务器价格表_阿里云/腾讯云/京东云/华为云报价大全

2024年全网最全的幻兽帕鲁服务器租用价格表&#xff0c;阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月&#xff0c;阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全&#xff1a; 阿里云幻…

C++类的六个默认成员函数(详细解析与总结)

目录 前言&#xff1a; 一、构造函数 a.特点 b.注意事项 1.首先明确什么是默认构造函数 2.默认构造函数对内置类型与自定义类型的处理 c.总结 二、析构函数 a.特点 b.注意事项 1.什么时候写析构函数&#xff1f; 2.析构函数对内置类型与自定义类型的处理 c.总结 …

pythonselenium自动化测试实战项目

说明&#xff1a;本项目采用流程控制思想&#xff0c;未引用unittest&pytest等单元测试框架 一.项目介绍 目的 测试某官方网站登录功能模块可以正常使用 用例 1.输入格式正确的用户名和正确的密码&#xff0c;验证是否登录成功&#xff1b; 2.输入格式正确的用户名和不…

【面试经典 | 150】单词拆分

文章目录 Tag题目来源解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【字符串】 题目来源 139. 单词拆分 解题思路 方法一&#xff1a;动态规划 定义状态 定义 dp[i] 表示字符串 s 前 i 个字符组成的字符串&#xff08;s[0, ..., i-1]&#xff09;是否能被…

【Node.js】模块化

概述 Nodejs 模块化规范遵循两套规范&#xff1a; Common JSES Module Common JS 引入模块&#xff08;require&#xff09;支持四种格式 支持引入内置模块例如 http os fs child_process 等const fs require(fs)&#xff0c;高版本也可以使用const fs require(node:fs…

【Java SE】封装

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 封装1.1 封装是什么1.2 封装的意义1.3 访问修饰限定符1.3.1 在Java中如何实现封装1.3.2 各种访问修饰限定…

SpringCloud微服务集成Dubbo

1、Dubbo介绍 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服…

【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】

二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1 解…

在 fstab文件中配置 UUID方式自动挂载数据盘、swap、目录(**)

linux如何挂在硬盘&#xff0c;自动挂载和手动挂载&#xff08;详细说明&#xff09;https://gitcode.csdn.net/65eedcea1a836825ed7a06f4.html 解决linux重启后磁盘挂载失效的问题 https://blog.csdn.net/sugarbliss/article/details/107033034 linux /etc/fstab 文件详细说…

UG NX二次开发(C#)-通过曲线组生成NURBS曲面

文章目录 1、前言2、UG NX中通过曲线组生成NURBS曲面的操作3、采用NXOpen C#方法的源代码1、前言 在UG NX中,曲线、曲面的操作使用比较多,对于创建NURBS曲面,可以通过曲线组来生成,本文以NXOpen C#的方法实现通过曲线组生成NURBS曲面的功能。对于UG NX二次开发感兴趣或者有…

探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

title: 探索多种数据格式&#xff1a;JSON、YAML、XML、CSV等数据格式详解与比较 date: 2024/3/28 17:34:03 updated: 2024/3/28 17:34:03 tags: 数据格式JSONYAMLXMLCSV数据交换格式比较 1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构&#xff0c;不同的数据格…

【aws】架构图工具推荐

碎碎念 以前以为日本冰箱论是个梗&#xff0c;结果居然是真的。用光盘传真其实还能理解&#xff08;毕竟我也喜欢电子古董2333&#xff09;&#xff0c;但是画架构图居然用的是excel&#xff0b;截图&#xff01;啊苍天呐&#xff0c;然后看到隔壁工位用excel画web原型又感觉释…

将数字城市复制到虚拟空间,如何搭建实景三维虚拟场景?

什么是实景三维&#xff1f; 实景三维&#xff08;3D Real Scene&#xff09;是一个专业术语&#xff0c;它指的是对一定范围内人类生产、生活和生态空间进行真实、立体、时序化反映和表达的数字虚拟空间。它是新型基础测绘的标准化产品&#xff0c;也是国家重要的新型基础设施…

权限提升-系统权限提升篇数据库提权PostsqlRedis第三方软件提权密码凭据钓鱼文件

知识点 1、数据库到Linux-数据库提权-Redis 3、数据库到Linux-数据库提权-PostgreSQL 4、计算机用户到系统-第三方软件-各类应用 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 Windows提权&#xff1a; 1、…

Linux 基于HAProxy+KeepAlived实现

Linux 基于HAProxyKeepAlived实现 1. 介绍1.1 高可用&#xff08;HA-High Avaialbility&#xff09;1.2 负载均衡&#xff08;LB-Load Balance&#xff09;1.3 HAProxy1.4 KeepAlived 2. 后端服务为Nginx2.1 系统拓扑2.2 环境说明2.3 前提条件2.4 详细步骤2.4.1 机器初始化2.4.…