QMainwindow窗口

QMainwindow窗口

  • 菜单栏
    • 在二级菜单中输入中文的方法
    • 给菜单栏添加相应的动作
    • 使用QMenu类的API方法添加菜单项
    • 分隔符也是QAction类
  • 工具栏
    • 添加工具栏
    • 在状态栏中添加控件
    • 工具栏添加其他类型的工具
    • 工具栏的属性
    • 添加多个工具栏
      • 使用窗口添加
      • 使用代码添加
  • 状态栏
    • 常用API
    • 在状态栏显示信息和清空显示的信息
  • 停靠窗口 (Dock Widget)
    • 简单使用
    • 属性面板
    • 添加控件
      • 存在的问题
      • 解决办法

菜单栏

只能有一个, 位于窗口的最上方

关于顶级菜单可以直接在UI窗口中双击, 直接输入文本信息即可, 对应子菜单项也可以通过先双击在输入的方式完成添加, 但是这种方式不支持中文的输入。
在这里插入图片描述
输入文字,按回车确认。
在这里插入图片描述
能创建二级菜单栏
在这里插入图片描述

在二级菜单中输入中文的方法

新建动作( action )
在这里插入图片描述
在这里插入图片描述
得到:
在这里插入图片描述
将刚刚创建的动作拖到相应的菜单列表中去:
在这里插入图片描述
在这里插入图片描述

效果:
在这里插入图片描述

给菜单栏添加相应的动作

在这里插入图片描述

在这里插入图片描述

其中,菜单栏对应的类为QAction
在这里插入图片描述
在这里插入图片描述
当用户点击了菜单栏中的某一个QAction时,triggered信号被发射出啦
在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->createprogect1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下创建项目";QMessageBox::information(this, "提示框","成功创建项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->open_action,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开项目",QMessageBox::Ok,QMessageBox::Save);});}MainWindow::~MainWindow()
{delete ui;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用QMenu类的API方法添加菜单项

在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QAction* a1;a1 = ui->menu->addAction("打开老项目");connect(a1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开老项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->createprogect1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下创建项目";QMessageBox::information(this, "提示框","成功创建项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->open_action,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开项目",QMessageBox::Ok,QMessageBox::Save);});
}MainWindow::~MainWindow()
{delete ui;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

分隔符也是QAction类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工具栏

可以有多个, 默认提供了一个, 窗口的上下左右都可以停靠

添加工具栏

在这里插入图片描述
在这里插入图片描述

在状态栏中添加控件

可以使用之前的方法,在状态栏中添加QAction控件

  1. 新建action
    在这里插入图片描述
    将action拖到工具栏里面
    在这里插入图片描述
    在这里插入图片描述
    添加信号和槽函数
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QAction* a1;a1 = ui->menu->addAction("打开老项目");//菜单栏connect(a1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开老项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->createprogect1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下创建项目";QMessageBox::information(this, "提示框","成功创建项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->open_action,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开项目",QMessageBox::Ok,QMessageBox::Save);});//工具栏connect(ui->action_4,&QAction::triggered,this,[=]{qDebug()<<"点击了一下工具4";QMessageBox::information(this, "提示框","点击了一下工具4",QMessageBox::Ok,QMessageBox::Save);});connect(ui->action_1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下工具1";QMessageBox::information(this, "提示框","点击了一下工具1",QMessageBox::Ok,QMessageBox::Save);});
}MainWindow::~MainWindow()
{delete ui;
}

效果:
在这里插入图片描述
在这里插入图片描述

工具栏添加其他类型的工具

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);// 添加分隔线
QAction *QToolBar::addSeparator()

在工具栏中,添加其他组件,并发送信号,调用槽函数的方法

工具栏的属性

在这里插入图片描述
看到了QToolBar的继承关系

movable属性值为True(并设置了上下左右都可以停靠)
在这里插入图片描述

在这里插入图片描述

设置图标大小和设置显示图标还是文字
在这里插入图片描述
对应的函数为
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

添加多个工具栏

使用窗口添加

在这里插入图片描述
再将之前的QAction拖到右边的工具栏里面去:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用代码添加

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"
#include "QLineEdit"
#include "QPushButton"
#include "QLineEdit"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QAction* a1;QAction* a2;QAction* a4;//QPushButton* b1= new QPushButton(this);// b1->setText("搜索按钮");// QLineEdit* e1 =  new QLineEdit();a1 = ui->menu->addAction("打开老项目");//给工具栏添加单行输入框ui->toolBar->addWidget(new QPushButton("搜索按钮"));ui->toolBar->addWidget(new QLineEdit);a4 = ui->toolBar->addAction("工具4");//菜单栏connect(a1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开老项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->createprogect1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下创建项目";QMessageBox::information(this, "提示框","成功创建项目",QMessageBox::Ok,QMessageBox::Save);});connect(ui->open_action,&QAction::triggered,this,[=]{qDebug()<<"点击了一下打开项目";QMessageBox::information(this, "提示框","成功打开项目",QMessageBox::Ok,QMessageBox::Save);});//工具栏connect(ui->action_4,&QAction::triggered,this,[=]{qDebug()<<"点击了一下工具4";QMessageBox::information(this, "提示框","点击了一下工具4",QMessageBox::Ok,QMessageBox::Save);});connect(ui->action_1,&QAction::triggered,this,[=]{qDebug()<<"点击了一下工具1";QMessageBox::information(this, "提示框","点击了一下工具1",QMessageBox::Ok,QMessageBox::Save);});
//    connect(a2,&QAction::triggered,this,[=]{
//                qDebug()<<"请输入搜索类容";
//                QMessageBox::information(this, "提示框",
//                                         "请输入搜索类容",
//                                         QMessageBox::Ok,
//                                         QMessageBox::Save);
//            });
//    connect(b1,&QAction::triggered,this,[=]{
//                qDebug()<<"请输入搜索类容";
//                QMessageBox::information(this, "提示框",
//                                         "请输入搜索类容",
//                                         QMessageBox::Ok,
//                                         QMessageBox::Save);
//            });connect(a4,&QAction::triggered,this,[=]{qDebug()<<"点击了工具4";QMessageBox::information(this, "提示框","点击了工具4",QMessageBox::Ok,QMessageBox::Save);});//对于toolbar2的操作QAction* a5;a5 = ui->toolBar_2->addAction("新建项目");connect(a5,&QAction::triggered,this,[=]{qDebug()<<"点击新建项目";QMessageBox::information(this, "提示框","点击了新建项目",QMessageBox::Ok,QMessageBox::Save);});QPushButton *b5 = new QPushButton(this);b5->setText("^_^");//添加小控件ui->toolBar_2->addWidget(b5);connect(b5,&QPushButton::clicked,this,[=]{qDebug()<<"点击了^_^";QMessageBox::information(this, "提示框","点击了^_^",QMessageBox::Ok,QMessageBox::Save);});QLineEdit* l5 = new QLineEdit();//添加小控件ui->toolBar_2->addWidget(l5);connect(l5,&QLineEdit::editingFinished,this,[=]{qDebug()<<"完成输入";QMessageBox::information(this, "提示框","完成了输入",QMessageBox::Ok,QMessageBox::Save);});//下方的工具栏QToolBar* b6 = new QToolBar(this);QMainWindow::addToolBar(Qt::BottomToolBarArea,b6);QAction* a6;a6 = b6->addAction("新建项目");connect(a6,&QAction::triggered,this,[=]{qDebug()<<"点击新建项目";QMessageBox::information(this, "提示框","点击了新建项目",QMessageBox::Ok,QMessageBox::Save);});}MainWindow::~MainWindow()
{delete ui;
}

在下方添加了工具栏,并在工具栏中添加了QAction组件
在这里插入图片描述

在下方的工具栏中,添加非QAction的组件(我使用的是QPushButton)

    //下方的工具栏QToolBar* b6 = new QToolBar(this);QMainWindow::addToolBar(Qt::BottomToolBarArea,b6);QAction* a6;a6 = b6->addAction("新建项目");connect(a6,&QAction::triggered,this,[=]{qDebug()<<"点击新建项目";QMessageBox::information(this, "提示框","点击了新建项目",QMessageBox::Ok,QMessageBox::Save);});QPushButton *pb6 = new QPushButton(this);pb6->setText("退出");//添加小控件b6->addWidget(pb6);connect(pb6,&QPushButton::clicked,this,[=]{qDebug()<<"点击了退出";QMessageBox::information(this, "提示框","点击了退出",QMessageBox::Ok,QMessageBox::Save);});

在这里插入图片描述

状态栏

只能有一个, 位于窗口最下方

需要在状态栏中添加某些控件, 显示某些属性, 使用最多的就是添加标签 QLabel

常用API

// 类型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);

在这里插入图片描述
在这里插入图片描述

状态栏出现了:右边的三角形灰色点点

在这里插入图片描述

在状态栏中添加QLabel,并设置跳转路径

    //状态栏QLabel* l7 = new QLabel();l7->setText(QStringLiteral("<a style='color: red; text-decoration: none ;font-size:20px' href = https://www.baidu.com><u>百度</u>"));ui->statusBar->addWidget(l7);connect(l7,&QLabel::linkActivated,this,[=](QString url){qDebug()<<"点击了状态栏label";QMessageBox::information(this, "提示框","点击了状态栏label",QMessageBox::Ok,QMessageBox::Save);QDesktopServices::openUrl(QUrl(url));});

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QLabel超链接

再添加一个pushbutton按钮

    //状态栏QLabel* l7 = new QLabel();l7->setText(QStringLiteral("<a style='color: red; text-decoration: none ;font-size:20px' href = https://www.baidu.com><u>百度</u>"));ui->statusBar->addWidget(l7);connect(l7,&QLabel::linkActivated,this,[=](QString url){qDebug()<<"点击了状态栏label";QMessageBox::information(this, "提示框","点击了状态栏label",QMessageBox::Ok,QMessageBox::Save);QDesktopServices::openUrl(QUrl(url));});// 再添加按钮QPushButton* button = new QPushButton("状态栏的按钮");ui->statusBar->addWidget(button);connect(button,&QPushButton::clicked,this,[=](){qDebug()<<"点击了状态栏label";QMessageBox::information(this, "提示框","点击了状态栏pushbutton",QMessageBox::Ok,QMessageBox::Save);});

在这里插入图片描述
在这里插入图片描述

在状态栏显示信息和清空显示的信息

void MainWindow::on_pushButton_2_clicked()
{//在状态栏显示信息connect(ui->pushButton_2,&QPushButton::clicked,this,[=]{ui->statusBar->showMessage("在状态栏显示的信息------------",0);});}void MainWindow::on_pushButton_clicked()
{//清空状态栏清空显示的信息connect(ui->pushButton,&QPushButton::clicked,this,[=]{ui->statusBar->clearMessage();});
}

在这里插入图片描述
显示信息
在这里插入图片描述

清空信息
在这里插入图片描述

在项目开发中,不建议状元栏显示信息和状态栏控件一起使用(存在覆盖的问题)

停靠窗口 (Dock Widget)

可以有多个, 默认没有提供, 窗口的上下左右都可以停靠

停靠窗口可以通过鼠标拖动停靠到窗口的上、下、左、右,或者浮动在窗口上方

在非QMainWindow类型的窗口中添加了停靠窗口, 那么这个窗口是不能移动和浮动的。

浮动窗口在工具栏中, 直接将其拖拽到UI界面上即可。

简单使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

属性面板

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
可以在属性面板里面改,也可以使用函数修改。

添加控件

t拖拽进去就行
在这里插入图片描述

然后调用信息窗口

void MainWindow::on_pushButton_3_clicked()
{connect(ui->pushButton_3,&QPushButton::clicked,this,[=]{QMessageBox::critical(ui->dockWidget, "标题", "内容", QMessageBox::Apply, QMessageBox::Reset);qDebug()<<"点击了一下";});
}

在这里插入图片描述
在这里插入图片描述

存在的问题

点第一下:没调用提示框
点第二下:
在这里插入图片描述
在这里插入图片描述
点第三下:

在这里插入图片描述
在这里插入图片描述
调用了两下

点第4下:
在这里插入图片描述
调用了三下。。。。。

解决办法

在点击控件的槽函数里面直接调用messagebox就行,不要再connect一次。。。。

void MainWindow::on_pushButton_3_clicked()
{qDebug()<<"点击了一下";
//    connect(ui->pushButton_3,&QPushButton::clicked,this,[=]{
//        //QMessageBox::critical(ui->dockWidget, "标题", "内容", QMessageBox::Apply, QMessageBox::Reset);
//        QMessageBox::information(this, "提示框",
//                                 "点击了^_^",
//                                 QMessageBox::Ok,
//                                 QMessageBox::Save);
//        qDebug()<<"调用了一次message";
//    });QMessageBox::information(this, "提示框","点击了一下浮动窗口中的控件",QMessageBox::Ok,QMessageBox::Save);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

NeuralNLP-NeuralClassifier的使用记录(一),训练预测自己的【英文文本多分类】

NeuralNLP-NeuralClassifier的使用记录&#xff0c;训练预测自己的英文文本多分类 NeuralNLP-NeuralClassifier是腾讯开发的一个多层多分类应用工具&#xff0c;支持的任务包括&#xff0c;文本分类中的二分类、多分类、多标签&#xff0c;以及层次多标签分类。支持的文本编码…

C语言库函数之 qsort 讲解、使用及模拟实现

引入 我们在学习排序的时候&#xff0c;第一个接触到的应该都是冒泡排序&#xff0c;我们先来复习一下冒泡排序的代码&#xff0c;来作为一个铺垫和引入。 代码如下&#xff1a; #include<stdio.h>void bubble_sort(int *arr, int sz) {int i 0;for (i 0; i < sz…

面试热题(最大子数组和)

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a;6 解释&#xff1a;连续…

免费批量ppt转pdf?一个方法教你完美转换

随着科技的不断发展&#xff0c;电子文档的使用越来越普遍。在商业、教育和个人领域&#xff0c;我们经常需要将PPT文件转换为PDF格式&#xff0c;以便更方便地共享和存档。幸运的是&#xff0c;现在有许多在线工具和软件可以帮助我们轻松地完成免费批量ppt转pdf。下面将介绍一…

【Linux】模拟实现linux的shell

#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/wait.h> #include <sys/types.h> #define NUM 1024 #define SIZE 32 #define SEP " " int main() {//保存输入后的字符串char …

Blazor前后端框架Known-V1.2.12

V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

Pyinstaller 打包 django 项目如何将命令行参数加入?

起因 Pyinstaller 打包 django 项目&#xff0c;打包成 manage.exe 后用命令行 cmd manage.exe runserver 0.0.0.0:8001 --noreload 来运行感觉很不方便。 希望能够直接把命令行参数也打包进去&#xff0c;直接运行 exe 。我走了些弯路&#xff0c;但最终实现了。 弯路 我看…

Redis之删除策略

文章目录 前言一、过期数据二、数据删除策略2.1定时删除2.2惰性删除2.3 定期删除2.4 删除策略比对 三、逐出算法3.1影响数据逐出的相关配置 总结 前言 Redis的常用删除策略 一、过期数据 Redis是一种内存级数据库&#xff0c;所有数据均存放在内存中&#xff0c;内存中的数据可…

web基础入门和PHP语言基础入门 一

web基础入门和php语言基础入门 一 WEB简介与HTTP入门WEB简介HTTP 简介HTTP 请求报文&#xff1a;请求方法&#xff1a;请求头部&#xff1a;&#xff08;常见的请求头&#xff09;HTTP 响应报文&#xff1a;响应状态码&#xff1a;Cookie HTML入门学习什么是HTML什么是标记语言…

PHP入门基础教程 - 专栏导读

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

Floyd算法

正如我们所知道的&#xff0c;Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展&#xff0c;三个for循环就可以解决问题&#xff0c;所以它的时间复杂度为O(n^3)。 Floyd算法的基本思想如下&#xff1a;从任意节点A到任意节点B的最短路径不外乎2种可能&#xff…

openGauss学习笔记-42 openGauss 高级数据管理-触发器

文章目录 openGauss学习笔记-42 openGauss 高级数据管理-触发器42.1 语法格式42.2 参数说明42.3 示例 openGauss学习笔记-42 openGauss 高级数据管理-触发器 触发器会在指定的数据库事件发生时自动执行函数。 42.1 语法格式 创建触发器 CREATE TRIGGER trigger_name { BEFORE…

Swagger-ui在idea中的使用

1.添加依赖 <!--添加swagger2相关概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相关功能--><de…

Linux学习之基本指令一

在学习Linux下的基本指令之前首先大家要知道Linux下一切皆目录&#xff0c;我们的操作基本上也都是对目录的操作&#xff0c;这里我们可以联想我们是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;类比学习更容易理解。 目录 01.ls指令 02. pwd命令 0…

PS实现多个图片转化GIF动画

PS实现多个图片转化为GIF动画步骤 一、导入图片素材1.打开PS软件&#xff0c;点击 [文件] --- [脚本] ---[将文件载入堆栈]2.选择图片3.导入成功 二、打开时间轴1.点击[窗口]---[时间轴]2.选择创建帧动画3.创建帧动画 三、创建动画1.复制帧。2.设置帧的内容。3.修改图片停留的时…

分布式应用:Zabbix监控Tomcat

目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 …

推荐 4 个 yyds 的 GitHub 项目

本期推荐开源项目目录&#xff1a; 1. 开源的 Markdown 编辑器 2. MetaGPT 3. SuperAGI 4. 一个舒适的笔记平台 01 开源的 Markdown 编辑器 Cherry 是腾讯开源的 Markdown 编辑器&#xff0c;基于 Javascript具有轻量简洁、易于扩展等特点&#xff0c; 它可以运行在浏览器或服…

UVM学习知识点

这里是引用 include 和 import pkg区别 1.作用 include与C语言中类似&#xff0c;用于在一个文件中插入另一个文件&#xff1b;import用于在一个作用域中引入一个package&#xff08;或其中的内容&#xff09;&#xff0c;使得这些内容在当前作用域中可以不添加其所在的packag…

Tesseract用OpenCV进行文本检测

我没有混日子&#xff0c;只是辛苦的时候没人看到罢了 一、什么是Tesseract Tesseract是一个开源的OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;OCR是一种技术&#xff0c;它可以识别和解析图像中的文本内容&#xff0c;使计算机能够理解并处理…

Maven之mirrorof范围

mirrorOf 是 central 还是 * 的问题 在配置阿里对官方中央仓库的镜像服务器时&#xff0c;我们使用到了 <mirror> 元素。 <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>…