Qt 6之五:创建菜单

Qt 6之五:创建菜单

Qt是一种跨平台的C++应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。

Qt 6之一:简介、安装与简单使用 https://blog.csdn.net/cnds123/article/details/130730203

Qt 6之二:项目的结构、资源文件的使用https://blog.csdn.net/cnds123/article/details/130741807

Qt 6之三: 项目的发布 https://blog.csdn.net/cnds123/article/details/130827966

Qt 6之四:基础概念讲解https://blog.csdn.net/cnds123/article/details/135401606

创建简单菜单程序

Qt 6,如何用Qt Creator 10创建菜单程序

现在,有两种方式设计菜单:

通过代码实现菜单的方式

通过户界面设计器设计菜单

下面以这个如下图简单的示例分别讲解两种实现方式:

一、通过代码实现菜单的方式

先创建新项目ch03,打开 Qt Creator 10,点击 “File” -> “New File or Project”。

在 “New Project” 对话框中,选择 “Qt Widgets Application”,然后点击 “Choose”。然后按照向导提示创建新项目(我这里,项目名设置为ch03,其他按向导默认),参见下图:

打开 mainwindow.cpp 文件,找到 MainWindow 构造函数。在这个函数中,你可以添加以下代码来创建菜单:

// 创建 "File" 菜单
QMenu* fileMenu = menuBar()->addMenu(tr("&File"));// 创建 "Open" 动作并添加到 "File" 菜单
QAction* openAction = fileMenu->addAction(tr("&Open"));
connect(openAction, &QAction::triggered, this, &MainWindow::onOpen);// 创建 "Exit" 动作并添加到 "File" 菜单
QAction* exitAction = fileMenu->addAction(tr("E&xit"));
connect(exitAction, &QAction::triggered, this, &MainWindow::close);// 创建 "Edit" 菜单
QMenu* editMenu = menuBar()->addMenu(tr("&Edit"));// 创建 "Copy" 动作并添加到 "Edit" 菜单
QAction* copyAction = editMenu->addAction(tr("&Copy"));
connect(copyAction, &QAction::triggered, this, &MainWindow::onCopy);

实现动作槽函数:然后你需要在 MainWindow 类中实现 onOpen 和 onCopy 槽函数。这些函数会在用户选择相应的菜单项时被调用。你可以根据需要实现这些函数,例如:

void MainWindow::onOpen()
{// 实现 "Open" 动作qDebug() << "Open action triggered";
}void MainWindow::onCopy()
{// 实现 "Copy" 动作qDebug() << "Copy action triggered";
}

这里进行了简化,上述代码在用户选择 "Open" 或 "Copy" 菜单项时打印一条调试信息。在实际应用中,你需要在这些函数中实现相应的功能。

为方便新手学习,下面给出添加图示:

你还需要在 mainwindow.h 中添加这槽函数的声明,具体位置是在

private:

    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

之前,添加

//添加槽函数的声明
private slots:void onOpen();   // 在这里添加 onOpen 槽函数的声明void onCopy();   // 在这里添加 onCopy 槽函数的声明

这是因为在 Qt 中,槽函数必须在类的声明中使用 Q_SLOTS 宏(或者其等价的 slots 宏)声明,否则 Qt 元对象系统会找不到这些槽函数。为方便新手学习,下面给出添加图示:

二、通过户界面设计器设计菜单

先创建新项目ch03,打开 Qt Creator 10,点击 “File” -> “New File or Project”。

在 “New Project” 对话框中,选择 “Qt Widgets Application”,然后点击 “Choose”。然后按照向导提示创建新项目(我这里,项目名设置为ch03,其他按向导默认),参见下图:

1、打开用户界面设计器:在项目浏览器中,找到 mainwindow.ui 文件并双击它。这会打开用户界面设计器。

2、添加菜单栏:在设计器中,你应该已经看到了一个名为 "MainWindow" 的窗口。在窗口的顶部,有一个名为 "Type here" 的灰色条,这就是菜单栏(QMenuBar)。双击击这个灰色条,然后在出现的输入框中输入你想要的菜单名称,例如 "File"回车。

用类似的方法添加菜单项。

File的子菜单    objectName属性值

Open             actionOpen

Exit              actionExit

Edit的子菜单

Copy             actionCopy

在设计过程中,可以使用快捷键Ctrl+R对窗口进行预览。

3、连接菜单项信号和槽,对于菜单项 (QAction) ,Qt Creator 不提供直接创建槽函数的 GUI 方法。你需要手动进行以下步骤:

3、连接菜单项信号和槽,对于菜单项 (QAction) ,Qt Creator 不提供直接创建槽函数的 GUI 方法。你需要手动进行以下步骤:

在 mainwindow.h 中声明槽函数,具体位置是在:

private:

    Ui::MainWindow *ui;

};

之前,添加:

private slots:void onOpen();   // 在这里添加 onOpen 槽函数的声明void onCopy();   // 在这里添加 onCopy 槽函数的声明 void onExit();   // 在这里添加 onExit 槽函数的声明

为方便新手学习,下面给出添加图示:

在 mainwindow.cpp 中定义这些槽函数:

void MainWindow::onOpen()
{qDebug() << "Open action triggered";
}void MainWindow::onCopy()
{qDebug() << "Copy action triggered";
}void MainWindow::onExit()
{close();
}

这里进行了简化,上述代码在用户选择 "Open" 或 "Copy" 菜单项时打印一条调试信息, 在实际应用中,你需要在这些函数中实现相应的功能。 "Exit" 菜单关闭窗体。

在 mainwindow.cpp 的构造函数中,还要建立 QAction 和槽函数的关联。请找到

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

在ui->setupUi(this);之后,添加如下几句:

    //建立 QAction 和槽函数的关联connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::onOpen);connect(ui->actionCopy, &QAction::triggered, this, &MainWindow::onCopy);connect(ui->actionExit, &QAction::triggered, this, &MainWindow::onExit);  // 添加

这样,当你在运行的程序中点击 "Open" 、 "Copy" 或"Exit"菜单项时,就会调用相应的槽函数。

为方便新手学习,下面给出添加图示:

Qt程序菜单(通过代码创建)视频https://www.bilibili.com/video/BV1uz4y1y7Eu/

Qt程序菜单2(通过UI文件创建)视频https://www.bilibili.com/video/BV1ft4y1e7hD/

Qt程序菜单3(右键菜单)视频https://www.bilibili.com/video/BV1Pa411F71D

三、简单记事本例子 

文件菜单包括:打开、保存、清除、关闭。
为 文本编辑区域TextEdit添加右键菜单以实现复制和粘贴功能。

以此为例,详细介绍代码和用Qt Designer创建界面,及菜单和自定义右键菜单等。

一)用代码创建的实现

先用Qt Creator新建项目ch05

打开 Qt Creator 10,点击 “File” -> “New File or Project”。

在 “New Project” 对话框中,选择 “Qt Widgets Application”,然后点击 “Choose”。然后按照向导提示创建新项目(我这里,项目名设置为ch05,其他按向导默认),注意,Qt Creator 10默认用CMake 构建的项目。

回顾:Qt创建一个新的Qt Widgets应用程序项目时,Qt Creator会自动生成几个文件的作用:

main.cpp文件是整个应用程序的入口点。它包含main函数,该函数是应用程序启动时首先执行的函数,这里是应用程序的一些一些初始化和启动工作等全局设置。

mainwindow.cpp文件包含了主窗口类的实现。这里你会定义主窗口类的构造函数、析构函数以及其他成员函数的实现。通常,你会在这个文件中实现主窗口的初始化、事件处理逻辑等。

在Qt应用程序中,mainwindow.h文件是用来定义主窗口类的接口的,它包含了类的声明和接口定义。你可以在这个文件中定义主窗口类的声明一些Qt的类的声明,比如QMainWindow或者QWidget,以及包括类的成员变量、成员函数的声明、信号和槽等。它通常会与mainwindow.cpp文件配合使用,mainwindow.cpp包含了主窗口类的实现,而mainwindow.h包含了主窗口类的声明。

将下面给出的mainwindow.h和mainwindow.cpp的代码分别复制到Qt Creator中创建的项目中的mainwindow.h和mainwindow.cpp文件中。确保将代码粘贴到正确的文件中,并替换默认生成的内容。

mainwindow.h内容如下:

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTextEdit>
#include <QFileDialog>
#include <QMenuBar>
#include <QMenu>
#include <QApplication>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void openFile();void saveFile();void clearText();void closeApp();private:QTextEdit *textEdit;
};#endif // MAINWINDOW_H

mainwindow.cpp内容如下:

// mainwindow.cpp
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{textEdit = new QTextEdit(this);setCentralWidget(textEdit);// 创建菜单栏QMenu *fileMenu = menuBar()->addMenu(tr("文件"));// 添加动作(菜单项)QAction *openAction = new QAction(tr("打开"), this);connect(openAction, &QAction::triggered, this, &MainWindow::openFile);fileMenu->addAction(openAction);QAction *saveAction = new QAction(tr("保存"), this);connect(saveAction, &QAction::triggered, this, &MainWindow::saveFile);fileMenu->addAction(saveAction);QAction *clearAction = new QAction(tr("清除"), this);connect(clearAction, &QAction::triggered, this, &MainWindow::clearText);fileMenu->addAction(clearAction);QAction *closeAction = new QAction(tr("关闭"), this);connect(closeAction, &QAction::triggered, this, &MainWindow::closeApp);fileMenu->addAction(closeAction);
}MainWindow::~MainWindow()
{
}void MainWindow::openFile()
{QString fileName = QFileDialog::getOpenFileName(this, tr("打开文件"));if (!fileName.isEmpty()) {QFile file(fileName);if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);textEdit->setText(in.readAll());file.close();}}
}void MainWindow::saveFile()
{QString fileName = QFileDialog::getSaveFileName(this, tr("保存文件"));if (!fileName.isEmpty()) {QFile file(fileName);if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&file);out << textEdit->toPlainText();file.close();}}
}void MainWindow::clearText()
{textEdit->clear();
}void MainWindow::closeApp()
{QApplication::quit();
}

在Qt Creator中,点击“构建”菜单中的“构建项目”选项,以确保项目能够成功构建。

点击“运行”菜单中的“运行”选项,或者按下“Ctrl+R”快捷键,来运行你的应用程序。

效果图如下:

上面例子右击文本区可以使用默认的右键菜单,参见下图:

修改上面的例子改用自定义的右键菜单

将程序文本区可以使用默认的右键菜单,改用自定义的右键菜单,例如仅实现“复制”和“粘贴”功能。

mainwindow.h文件的头部添加:

#include <QContextMenuEvent>  //

并在private slots:部分之前部分添加:

protected:void contextMenuEvent(QContextMenuEvent *event) override;

在private slots:部分之中添加:

    void copyText();void pasteText();

为方便初学者图示如下:

mainwindow.cpp文件中

在MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

{}函数中最后一句后添加

    // 禁用默认右键菜单textEdit->setContextMenuPolicy(Qt::NoContextMenu);

在mainwindow.cpp文件末尾添加如下部分:

void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{QMenu menu(this);QAction *copyAction = menu.addAction("复制");QAction *pasteAction = menu.addAction("粘贴");QAction *selectedAction = menu.exec(event->globalPos());if (selectedAction == copyAction) {copyText();} else if (selectedAction == pasteAction) {pasteText();}
}void MainWindow::copyText()
{textEdit->copy();
}void MainWindow::pasteText()
{textEdit->paste();
}

效果图如下:

二)用Qt Designer创建的实现

先用Qt Creator新建项目ch05b

打开 Qt Creator 10,点击 “File” -> “New File or Project”。

在 “New Project” 对话框中,选择 “Qt Widgets Application”,然后点击 “Choose”。然后按照向导提示创建新项目(我这里,项目名设置为ch05b,其他按向导默认),注意,Qt Creator 10默认用CMake 构建的项目。

现在,在项目视图中找到mainwindow.ui文件,双击启动Qt Creator内置的Qt Designer进行界面设计:

在Qt Designer中,你将看到一个带有网格的空白画布,这是你的表单。左侧的"Widget Box"包含了可以拖放到表单上的各种控件(widgets),如按钮、文本框、滑块等。

添加控件 - 从"Widget Box"中选择一个控件,然后拖放到画布上。

调整属性 - 当一个控件被选中时,你可以在"Property Editor"中修改它的属性,如大小、位置、文本和其他自定义属性。

布局管理 - 为了使控件能够适应不同的窗口大小,你应该使用布局管理器。选择你的控件,还可以点击工具栏中的布局按钮(如"Layout Horizontally")来自动管理控件的位置和大小。

预览界面 -可以使用快捷键Ctrl+R来快速预览你设计的界面。

在窗体放置一个Text Edit 小部件(Widget)

“文件”菜单项子项设置为:

子项名   text属性     shortcut属性         objectName属性值

Open      打开         Ctrl+O                actionOpen

Save      保存         Ctrl+S                actionSave

Clear     清除         Ctrl+Shift+C          actionClear

Close     关闭         Ctrl+Q                actionClose

注意: text属性,不能输入中文,可复制记事本中的中文粘贴后回车; shortcut属性的输入是按相应的键。

下图是设计好的样子:

完成设计后,保存.ui文件。Qt Creator会自动将UI文件与项目集成,当你构建项目时,.ui文件将被uic(UI compiler)自动转换为对应的C++代码。

现在,编写业务逻辑,通常,你会创建一个类来继承生成的UI类,并在这个类中实现你的逻辑。

用下面代码修改或替换MainWindow类的头文件(通常是mainwindow.h):

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTextEdit>
#include <QAction>
#include <QMenuBar>
#include <QMessageBox>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QCloseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void openFile();void saveFile();void clearText();void closeApplication();private:Ui::MainWindow *ui;void closeEvent(QCloseEvent *event) override;
};#endif // MAINWINDOW_H

用下面代码修改或替换MainWindow类的实现文件(通常是mainwindow.cpp),其中,包括UI头文件,并实现构造函数、析构函数以及槽函数:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 使用新的槽函数名称connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::openFile);connect(ui->actionSave, &QAction::triggered, this, &MainWindow::saveFile);connect(ui->actionClear, &QAction::triggered, this, &MainWindow::clearText);connect(ui->actionClose, &QAction::triggered, this, &MainWindow::closeApplication);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::openFile()
{QString fileName = QFileDialog::getOpenFileName(this, tr("打开文件"), "", tr("Text Files (*.txt);;All Files (*)"));if (!fileName.isEmpty()) {QFile file(fileName);if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QTextStream in(&file);ui->textEdit->setPlainText(in.readAll());file.close();}}
}void MainWindow::saveFile()
{QString fileName = QFileDialog::getSaveFileName(this, tr("保存文件"), "", tr("Text Files (*.txt);;All Files (*)"));if (!fileName.isEmpty()) {QFile file(fileName);if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&file);out << ui->textEdit->toPlainText();file.close();}}
}void MainWindow::clearText()
{ui->textEdit->clear();
}void MainWindow::closeApplication()
{close();
}void MainWindow::closeEvent(QCloseEvent *event)
{// 在这里可以添加代码处理未保存的更改,例如提示用户保存// 如果用户取消关闭,可以调用 event->ignore();event->accept();
}

现在,构建并运行你的应用程序来看到设计的界面和业务逻辑的实际效果,按下快捷键Ctrl+R:

OK!

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

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

相关文章

DHCP动态主机配置协议

文章目录 DHCP1、DHCP的优势2、DHCP的分配方式3、DHCP的租约过程4、服务器配置命令格式命令图文详解 DHCP DHCP&#xff1a;动态主机配置协议 1、DHCP的优势 减少管理员的工作量 避免输入错误的可能 避免IP地址冲突 当更改IP地址段时&#xff0c;不需要重新配置每个用户的…

Qt 三维柱状图 Q3DBar 和 三维条形图中的数据序列 QBar3DSeries

(一) 使用 Q3DBars 图形类和 QBar3DSeries 序列类可以绘制三维柱状图 窗口右侧是用 Q3DBars 和 QBar3DSeries 绘制的三维柱状图&#xff0c;这个图只有一个QBar3DSeries序列&#xff0c;数据是按行存储的&#xff0c;可以有多行。水平方向是行坐标轴和列坐标轴&#xff0c;使用…

阿里云服务器新购、续费、升级优惠政策与活动汇总

阿里云作为国内领先的云服务提供商&#xff0c;始终致力于为客户提供优质、高效的服务。为了更好地满足客户的需求&#xff0c;阿里云经常推出各种优惠政策与活动。本文将为大家详细介绍阿里云服务器的新购、续费、升级优惠政策与优惠活动&#xff0c;帮助大家更好地了解并利用…

雪花代码-html版

雪花代码 动画效果 代码 <!DOCTYPE html><html><head><style>body {background-color: #000000;}.snowflake {position: absolute;font-size: 10px;color: #FFFFFF;text-shadow: 1px 1px 1px #000000;user-select: none;}</style></head>…

MySQL中datetime和timestamp的区别

datetime和timestamp的区别 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储…

Vue.js设计与实现阅读-2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

Java中的多线程

进程和线程的概念 进程是应用程序的执行实例有独立的内存空间和系统资源。 线程是进程中执行运算的最小单位&#xff0c;可完成一个独立的顺序控制流程 一。一个进程可以包含多个线程&#xff0c;每个线程都独立执行特定的任务&#xff0c; 是CPU调度和分派的基本单位。 多线…

轴承滚珠故障的理论推导与计算(修订中...)

1.缘起 轴承故障故障位置在高频&#xff0c;如果不即时处理&#xff0c;恶化后&#xff0c;滚珠会有单颗故障迅速恶化到多颗&#xff0c;如果此时电机承载较大负载&#xff0c;轴承的恶化&#xff0c;会牵连到相关的动力轴。是一个不可不进行监测的项目。 2.频谱特征 轴承的…

【AWS】使用亚马逊云服务器创建EC2实例

目录 前言为什么选择 Amazon EC2 云服务器搭建 Amazon EC2 云服务器注册亚马逊账号登录控制台服务器配置免费套餐预览使用 Amazon EC2 云服务器打开服务器管理界面设置服务器区域填写实例名称选择服务器系统镜像选择实例类型创建密钥对网络设置配置存储启动实例查看实例 总结 前…

Window平台安装MongoDB

在部署前需要在官网先确定系统对应的Mongo DB版本。 本机电脑为Window10&#xff0c;所以这里以MongoDB 6.0版本。 1 在官网下载安装包 2 安装MongoDB MongoDB Compass 是一个图形界面管理工具&#xff0c;如果勾选了安装会花费长一点时间&#xff0c;可以取消掉勾选&#xff…

2024最新适用于 Windows 、Mac 的最佳屏幕录制软件

屏幕录制软件可以帮助我们录制 PC 和MacBook的实时屏幕视频。如果您想为 优酷录制视频&#xff0c;或者您正在为您的公司制作基于视频的项目&#xff0c;并且需要捕获屏幕的实时视频录制&#xff0c;那么我们在此列出了 一 款适合您的 Windows 、Mac的 2024 年最佳屏幕录制软件…

《NLP入门到精通》栏目导读

一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》&#xff0c;因此&#xff0c;读者需要一定得深度学习基础&#xff0c;才能过度到此栏目内容。 二、博客建设理念 本博客基地&am…

Transformer详解【学习笔记】

文章目录 1、Transformer绪论2、Encoders和Decoder2.1 Encoders2.1.1 输入部分2.1.2 多头注意力机制2.1.3 残差2.1.4 LayNorm&#xff08;Layer Normalization&#xff09;2.1.5 前馈神经网路 2.2 Decoder2.2.1 多头注意力机制2.2.2 交互层 1、Transformer绪论 Transformer在做…

RabbitMQ(十)队列的声明方式

目录 1.编程式声明补充&#xff1a;RabbitTemplate 和 AmqpAdmin 的区别 2.声明式声明补充&#xff1a;new Queue() 和 QueueBuilder.durable(queueName).build() 的区别 背景&#xff1a; 在学习 RabbitMQ 的使用时&#xff0c; 经常会遇到不同的队列声明方式&#xff0c;有的…

Redis管道操作

文章目录 1. 问题提出2. 解决方案3. 案例演示4. 总结 1. 问题提出 如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于C/S一级请求响应协议的TCP服务&#xff0c;一个请求会遵循一下步骤&#xff1a; 客户端向服务端发送命令分四步&#xff08;发送命令-> …

个人网站制作 Part 1 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 项目概述&#x1f527; 开发工具和环境配置&#x1f6e0; 项目实现步骤步骤 1: 创建HTML文件步骤 2: 添加CSS样式步骤 3: 链接CSS文件步骤 4: 添加JavaScript交互 &#…

Unity中向量的点乘、叉乘区别和作用以及经典案例

文章目录 点乘&#xff08;Dot Product&#xff09;叉乘&#xff08;Cross Product&#xff09;向量归一化&#xff08;Normalize&#xff09;其他作用 unity开发中我们要计算角度&#xff0c;判断位置&#xff0c;常用点乘、叉乘、归一化等等&#xff0c;我们看看他们的使用案…

tiktok_浅谈hook ios之发包x-ss-stub

frida-trace ios手机一部&#xff0c;需要越狱的电脑一台idacrackerXI 目标app&#xff1a; ipa 包&#xff0c;点击前往 密码&#xff1a;8urs 协议分析起始从抓包开始&#xff0c;个人习惯 一般安卓逆向可以直接搜关键词&#xff0c;但是ios 都在 Mach-O binary (reverse…

微服务-Gateway

案例搭建 官网地址 父Pom <com.alibaba.cloud.version>2.2.8.RELEASE</com.alibaba.cloud.version> <com.cloud.version>Hoxton.SR12</com.cloud.version> <com.dubbo.version>2.2.7.RELEASE</com.dubbo.version> <dependencyManagem…

SQL-DML增删改

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…