第十四课:采用 Qt 开发翻页/分页/多页窗体组件

功能描述:采用 Qt 开发一个翻页/分页/多页的窗体组件,封装为 QWidget 的子类,在你的应用程序中可直接使用。

一、最终演示效果

本次制作的翻页/分页/多页窗体组件是基于 Qt 开发,整个程序封装成 PageWidget 类,继承于 QWidget,在你的应用程序中可直接使用。

主要功能包括:向前一页、向后一页、定位到具体某一页,当前页用红色字体表示, 鼠标悬浮到某一页背景色显示蓝色,样式可根据用户需求进行修改。

二、翻页/分页/多页窗体组件开发

翻页/分页/多页窗体组件主要在 PageWidget.h 和 PageWidget.cpp 中封装了 PageWidget 类,实现了向前一页、向后一页、定位到具体某一页等功能。 

PageWidget.h 文件代码如下:

#ifndef PAGEWIDGET_H
#define PAGEWIDGET_H#include <QWidget>
#include <QList>
#include <QLabel>
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QLineEdit>
#include <QIntValidator>
#include <QDebug>class PageWidget : public QFrame
{Q_OBJECT
public:// 翻页显示分成三个部分, 左...中...右,blockSize 表示每部分的标签个数PageWidget(int blockSize = 3);/*** @brief getBlockSize  获取每部分的标签个数* @return*/int getBlockSize() const;/*** @brief setBlockSize      设置每部分的标签个数* @param blockSize         每部分的标签个数,block size 必须是奇数, 且最小为3*/void setBlockSize(int blockSize);/*** @brief getMaxPage    获取总页数* @return*/int getMaxPage() const;/*** @brief setMaxPage    设置总页数* @param maxPage       总页数值*/void setMaxPage(int maxPage);/*** @brief getCurrentPage    获取当前页数* @return*/int getCurrentPage() const;/*** @brief setCurrentPage    设置当前页* @param currentPage       当前页数值* @param signalEmitted     为 true 时发送 currentPageChanged(int) 信号*/void setCurrentPage(int currentPage, bool signalEmitted = false);protected:/*** @brief eventFilter       事件过滤器,响应上一页标签和下一页标签的点击事件* @param watched           发生事件的组件* @param e                 发生事件的类型* @return*/virtual bool eventFilter(QObject * watched, QEvent * e);signals:/*** @brief currentPageChanged        当前页信号* @param page                      页码*/void currentPageChanged(int page);private:// 字体QFont font;// 前一页,"<"QLabel * previousPageLabel = nullptr;// 左侧部分标签的容器QWidget * leftPagesWidget = nullptr;// 左侧分隔符,".."QLabel * leftSeparateLabel = nullptr;// 中间部分标签的容器QWidget * centerPagesWidget = nullptr;// 右侧分隔符,".."QLabel * rightSeparateLabel = nullptr;// 右侧部分标签的容器QWidget * rightPagesWidget = nullptr;// 下一页,">"QLabel * nextPageLabel = nullptr;// 翻页显示分成三个部分, 左...中...右,blockSize 表示每部分的标签个数int blockSize;// 总页数int maxPage;// 当前页int currentPage;// 存储所有的数字标签,总个数为 blockSize*3QList<QLabel *> pageLabels;/*** @brief initialize        标签初始化*/void initialize();/*** @brief updatePageLabels  更新显示标签*/void updatePageLabels();
};#endif // PAGEWIDGET_H

PageWidget.cpp 文件代码如下:

#include "PageWidget.h"PageWidget::PageWidget(int blockSize): blockSize(blockSize)
{setStyleSheet("background-color:#2B2C2E;color:rgba(255,255,255,0.85);");font = QFont("Times New Roman", 14);font.setBold(true);previousPageLabel = new QLabel;previousPageLabel->setFont(font);previousPageLabel->setAlignment(Qt::AlignCenter);previousPageLabel->setFixedSize(23,23);previousPageLabel->setText("<");previousPageLabel->setStyleSheet("QLabel{color:rgba(255,255,255,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");leftPagesWidget = new QWidget;leftPagesWidget->resize(23,23);leftPagesWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);leftSeparateLabel = new QLabel;leftSeparateLabel->setFont(font);leftSeparateLabel->setAlignment(Qt::AlignCenter);leftSeparateLabel->setFixedSize(23,23);leftSeparateLabel->setText("..");leftSeparateLabel->setStyleSheet("QLabel{color:rgba(255,255,255,0.85);}");centerPagesWidget = new QWidget;centerPagesWidget->resize(23,23);centerPagesWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);rightSeparateLabel = new QLabel;rightSeparateLabel->setFont(font);rightSeparateLabel->setAlignment(Qt::AlignCenter);rightSeparateLabel->setFixedSize(23,23);rightSeparateLabel->setText("..");rightSeparateLabel->setStyleSheet("QLabel{color:rgba(255,255,255,0.85);}");rightPagesWidget = new QWidget;rightPagesWidget->resize(23,23);rightPagesWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);nextPageLabel = new QLabel;nextPageLabel->setFont(font);nextPageLabel->setAlignment(Qt::AlignCenter);nextPageLabel->setFixedSize(23,23);nextPageLabel->setText(">");nextPageLabel->setStyleSheet("QLabel{color:rgba(255,255,255,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");QHBoxLayout * mainLayout = new QHBoxLayout;mainLayout->setMargin(0);mainLayout->setContentsMargins(0,0,0,0);mainLayout->setSpacing(0);mainLayout->addStretch(1);mainLayout->addWidget(previousPageLabel);mainLayout->addWidget(leftPagesWidget);mainLayout->addWidget(leftSeparateLabel);mainLayout->addWidget(centerPagesWidget);mainLayout->addWidget(rightSeparateLabel);mainLayout->addWidget(rightPagesWidget);mainLayout->addWidget(nextPageLabel);mainLayout->addStretch(1);setLayout(mainLayout);initialize();setMaxPage(1);
}// 获取每部分的标签个数
int PageWidget::getBlockSize() const
{return blockSize;
}// 设置每部分的标签个数,为了便于计算, block size 必须是奇数, 且最小为3
void PageWidget::setBlockSize(int blockSize)
{blockSize = qMax(blockSize, 3);if(blockSize%2 == 0){++blockSize;}this->blockSize = blockSize;
}// 获取总页数
int PageWidget::getMaxPage() const
{return maxPage;
}// 设置总页数
void PageWidget::setMaxPage(int page)
{page = qMax(page, 1);if(maxPage != page){this->maxPage = page;this->currentPage = 1;updatePageLabels();}
}// 获取当前页数
int PageWidget::getCurrentPage() const
{return currentPage;
}// 设置当前页
void PageWidget::setCurrentPage(int page, bool signalEmitted)
{page = qMax(page, 1);page = qMin(page, maxPage);if(page != this->currentPage){this->currentPage = page;updatePageLabels();if(signalEmitted){emit currentPageChanged(page);}}
}// 事件过滤器,响应上一页标签和下一页标签的点击事件
bool PageWidget::eventFilter(QObject * watched, QEvent * e)
{if(e->type() == QEvent::MouseButtonRelease){int page = -1;// 点击了前一页标签if(watched == previousPageLabel){page = getCurrentPage()-1;}// 点击了后一页标签if(watched == nextPageLabel){page = getCurrentPage()+1;}// 点击了具体数字的标签for(int i=0; i<pageLabels.count(); i++){if(watched == pageLabels.at(i)){page = pageLabels.at(i)->text().toInt();break;}}if(page != -1){setCurrentPage(page, true);return true;}}return QWidget::eventFilter(watched, e);
}// 页码标签初始化,分成三个部分, 左...中...右
void PageWidget::initialize()
{previousPageLabel->installEventFilter(this);nextPageLabel->installEventFilter(this);QHBoxLayout * leftLayout = new QHBoxLayout();leftLayout->setMargin(0);leftLayout->setContentsMargins(0,0,0,0);leftLayout->setSpacing(0);QHBoxLayout * centerLayout = new QHBoxLayout();centerLayout->setMargin(0);centerLayout->setContentsMargins(0,0,0,0);centerLayout->setSpacing(0);QHBoxLayout * rightLayout = new QHBoxLayout();rightLayout->setMargin(0);rightLayout->setContentsMargins(0,0,0,0);rightLayout->setSpacing(0);for(int i=0; i<blockSize*3; ++i){QLabel * label = new QLabel();font.setFamily("Times New Roman");label->setFont(font);label->setAlignment(Qt::AlignCenter);label->setFixedHeight(23);label->setMinimumWidth(23);label->setText(QString::number(i+1));label->setStyleSheet("QLabel{color:rgba(255,255,255,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");label->installEventFilter(this);pageLabels.append(label);if(i<blockSize){leftLayout->addWidget(label);}else if(i<blockSize*2){centerLayout->addWidget(label);}else{rightLayout->addWidget(label);}}leftPagesWidget->setLayout(leftLayout);centerPagesWidget->setLayout(centerLayout);rightPagesWidget->setLayout(rightLayout);
}// 更新显示标签
void PageWidget::updatePageLabels()
{leftSeparateLabel->hide();rightSeparateLabel->hide();// 总页数小于 blockSize*3,总页数数值之前的 Label 都显示,之后的都隐藏if(maxPage <= blockSize*3){for(int i=0; i<pageLabels.count(); i++){QLabel * label = pageLabels.at(i);if(i<maxPage){label->setText(QString::number(i+1));label->show();}else{label->hide();}if(currentPage-1 == i){// 当前页的字体设置为蓝色label->setStyleSheet("QLabel{color:rgba(255,0,0,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");}else{// 非当前页的字体设置为白色label->setStyleSheet("QLabel{color:rgba(255,255,255,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");}}return;}// 以下情况为 maxPage 大于blockSize * 3, 所有的页码label都要显示// c 为 currentPage// n 为 block size// m 为 maxPage// 1. c ∈ [1, n + n/2 + 1]: 显示前 n * 2 个, 后 n 个: 只显示右边的分隔符// 2. c ∈ [m - n - n/2, m]: 显示前 n 个, 后 n * 2 个: 只显示左边的分隔符// 3. 显示[1, n], [c - n/2, c + n/2], [m - 2*n + 1, m]: 两个分隔符都显示int c = currentPage;int n = blockSize;int m = maxPage;int centerStartPage = 0;if(c >= 1 && c <= n+n/2+1){// 1. c ∈ [1, n + n/2 + 1]: 显示前 n * 2 个, 后 n 个: 只显示右边的分隔符centerStartPage = n+1;rightSeparateLabel->show();}else if(c >= m-n-n/2 && c <= m){// 2. c ∈ [m - n - n/2, m]: 显示前 n 个, 后 n * 2 个: 只显示左边的分隔符centerStartPage = m-n-n+1;leftSeparateLabel->show();}else{// 3. 显示[1, n], [c - n/2, c + n/2], [m - n + 1, m]: 两个分隔符都显示centerStartPage = c-n/2;rightSeparateLabel->show();leftSeparateLabel->show();}for(int i=0; i<n; ++i){pageLabels.at(i)->setText(QString::number(i+1));                        // 前面 n 个pageLabels.at(n+i)->setText(QString::number(centerStartPage+i));        // 中间 n 个pageLabels.at(3*n-i-1)->setText(QString::number(m-i));                  // 后面 n 个}for(int i=0; i<pageLabels.count(); ++i){QLabel * label = pageLabels.at(i);int page = label->text().toInt();if(page == currentPage){// 当前页的字体设置为蓝色label->setStyleSheet("QLabel{color:rgba(255,0,0,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");}else{// 非当前页的字体设置为白色label->setStyleSheet("QLabel{color:rgba(255,255,255,0.85); padding:2px;}""QLabel:hover{color: black; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}");}label->show();}
}

如果仅作为翻页/分页/多页组件使用的话,将以上两个文件直接添加到程序中即可使用。为了演示效果,我还写了 Widget.cpp 和 Widget.h 文件,集成翻页/分页/多页组件的使用。

Widget.h 文件代码如下:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "PageWidget.h"class Widget : public QWidget
{Q_OBJECT
public:explicit Widget();private slots:/*** @brief changeMaxPage  设置总页数*/void changeMaxPage();private:// 字体QFont font;// 总页数标签QLabel * maxPageLabel;// 总页数输入框QLineEdit * maxPageLineEdit;// 总页数设置QPushButton * maxPageBtn;// 分页窗口PageWidget * pageWidget;
};#endif // WIDGET_H

Widget.cpp 文件代码如下:

#include "Widget.h"
#include "PageWidget.h"Widget::Widget()
{setStyleSheet("background-color:#2B2C2E;color:rgba(255,255,255,0.85);");font = QFont("黑体", 12);maxPageLabel = new QLabel;maxPageLabel->setFont(font);maxPageLabel->setAlignment(Qt::AlignCenter);maxPageLabel->setFixedSize(80,23);maxPageLabel->setText("总页数:");maxPageLineEdit = new QLineEdit;font.setFamily("Times New Roman");maxPageLineEdit->setFixedHeight(23);maxPageLineEdit->setMinimumWidth(200);maxPageLineEdit->setFont(font);maxPageLineEdit->setAlignment(Qt::AlignCenter);maxPageLineEdit->setValidator(new QIntValidator(1,10000000));maxPageLineEdit->setStyleSheet("background-color:rgba(255,255,255,0.05); border-radius: 3px; margin:0px;");connect(maxPageLineEdit, SIGNAL(returnPressed()), this, SLOT(changeMaxPage()));maxPageBtn = new QPushButton;font.setFamily("黑体");maxPageBtn->setFont(font);maxPageBtn->setText("设置");maxPageBtn->setStyleSheet("QPushButton{background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #5EDCF8, stop:0.5 #82E5FB, stop:1 #06C9F4); color:rgb(255,255,255); border-radius:8px; margin:0px;}""QPushButton:pressed{background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #c0c0c0, stop:1 #808080); color:rgb(255,255,255); border-radius:8px; margin:0px;}""QPushButton:disabled{background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #c0c0c0, stop:1 #808080); color:rgb(255,255,255); border-radius:8px; margin:0px;}");maxPageBtn->setFixedSize(60,23);connect(maxPageBtn, SIGNAL(clicked()), this, SLOT(changeMaxPage()));pageWidget = new PageWidget;QHBoxLayout * topLayout = new QHBoxLayout();topLayout->setMargin(0);topLayout->setContentsMargins(0,0,0,0);topLayout->setSpacing(10);topLayout->addWidget(maxPageLabel);topLayout->addWidget(maxPageLineEdit);topLayout->addWidget(maxPageBtn);QVBoxLayout * mainLayout = new QVBoxLayout();mainLayout->setMargin(0);mainLayout->setContentsMargins(20,20,20,20);mainLayout->setSpacing(20);mainLayout->addLayout(topLayout);mainLayout->addWidget(pageWidget);setLayout(mainLayout);
}// 设置总页数
void Widget::changeMaxPage()
{pageWidget->setMaxPage(maxPageLineEdit->text().toInt());pageWidget->setCurrentPage(1);
}

完整的代码已经贴上,每个函数的备注写的非常清楚,如有不清楚的地方可以私信我。

完整代码压缩包下载地址: 

https://download.csdn.net/download/tanou3212/88235059icon-default.png?t=N6B9https://download.csdn.net/download/tanou3212/88235059如果出现中文乱码的问题,请参考我的另外一篇博客《第十课:Qt 字符编码和中文乱码相关问题》 ,百分百能解决你的问题!

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

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

相关文章

【微信红包】Axure聊天发红包原型图,含流程图和PRD产品文档

作品概况 页面数量&#xff1a;共 60 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;聊天软件、社交软件 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为「发红包」的原型设计图&#xff0c…

Linux_4_文本处理工具和正则表达式

目录 1文本编辑工具之神VIM1.1 vi和vim简介1.2使用vim1.2.1 vim 命令格式1.2.2三种主要模式和转换 1.3扩展命令模式1.3.1扩展命令模式基本命令1.3.2 地址定界1.3.3查找并替换1.3.4定制vim的工作特性1.3.4.1行号1.3.4.2忽略字符的大小写1.3.4.3白动缩进1.3.4.4复制粘贴保留格式1…

商城-学习整理-集群-K8S-集群环境部署(二十四)

目录 一、MySQL集群1、mysql集群原理2、Docker安装模拟MySQL主从复制集群1、下载mysql镜像2、创建Master实例并启动3、创建 Slave 实例并启动4、为 master 授权用户来同步数据1、进入 master 容器2、进入 mysql 内部 &#xff08;mysql –uroot -p&#xff09;3、查看 master 状…

Haproxy+Keepalive 整合rabbitmq实现高可用负载均衡

Haproxy 实现负载均衡 HAProxy 提供高可用性、负载均衡及基于 TCPHTTP 应用的代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种解决方案&#xff0c;包括 Twitter,Reddit,StackOverflow,GitHub 在内的多家知名互联网公司在使用。HAProxy 实现了一种…

响应式web-PC端web与移动端web(H5)兼容适配 选型方案

背景 项目需要&#xff0c;公司已经有一套PC端web&#xff0c;需要做一套手机端浏览器可用的&#xff0c;但是又想兼容pc端&#xff0c;适配的web项目。 以下是查阅到响应布局现成的开源模版。根据自己技术栈&#xff0c;vue2,js来搜索相关的开源项目。 RuoYi 使用若依快速…

【LeetCode75】第三十七题 二叉树中的最长交错路径

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一棵二叉树&#xff0c;问我们在这棵树里能找到的最长交错路径。最长交错路径就是在二叉树里一左一右一左一右这样走&#xff0c;最…

后端面试话术集锦第三篇:spring cloud 面试话术

🚗后端面试集锦目录 💖后端面试话术集锦第一篇:spring面试话术💖 💖后端面试话术集锦第二篇:spring boot面试话术💖 💖后端面试话术集锦第三篇:spring cloud面试话术💖 💖后端面试话术集锦第四篇:ElasticSearch面试话术💖 💖后端面试话术集锦第五篇:r…

利用深度蛋白质序列嵌入方法通过 Siamese neural network 对 virus-host PPIs 进行精准预测【Patterns,2022】

研究背景&#xff1a; 病毒感染可以导致多种组织特异性损伤&#xff0c;所以 virus-host PPIs 的预测有助于新的治疗方法的研究&#xff1b;目前已有的一些 virus-host PPIs 鉴定或预测方法效果有限&#xff08;传统实验方法费时费力、计算方法要么基于蛋白结构或基因&#xff…

以太网交换机高稳定性时钟系统应用方案

随着网络技术的不断发展&#xff0c;我们的生活也发生着巨大的变化&#xff0c;这离不开以太网起到的重大作用&#xff0c;全球大部分地区的以太网交换机市场都出现了增长。 那么&#xff0c;平常我们所说的以太网交换机到底是什么&#xff1f;今天小扬给大家科普科普以太网交…

ubuntu学习(六)----文件编程实现cp指令

1 思路 Linux要想复制一份文件通常指令为&#xff1a; cp src.c des.c 其中src.c为源文件&#xff0c;des.c为目标文件。 要想通过文件编程实现cp效果&#xff0c;思路如下 1 首先打开源文件 src.c 2 读src到buf 3 创建des.c 4 将buf写入到des.c 5 close两个文件 2 实现 vi …

第一次实验:Protocol Layers

第一次实验&#xff1a;Protocol Layers 捕获跟踪*Pick a URL and fetch it with* wget *or* curl*.* 检查跟踪数据包结构协议开销复用密钥*Which Ethernet header field is the demultiplexing key that tells it the next higher layer is IP?**Which IP header field is th…

get请求报错400 非法参数

get请求报错400 非法参数 背景&#xff1a;get请求数据&#xff0c;SpringBoot提供接口&#xff0c;返回400&#xff0c;报错非法参数此种情况排除接口本身错误之外&#xff0c;检查参数中有没有特殊字符 " < > [ \ ] ^ { | } 我这边就是因为其中一个参数中有中括…

(Deep Learning)准确率和召回率的基础概念

算法模型极大的提升了对各类结果的预测效率。 【算法模型的本质】 算法模型的本质&#xff0c;是基于输入的各类变量因子&#xff0c;通过计算规则&#xff08;模型or公式&#xff09;&#xff0c;得出预测结果。 典型的预测结果比如&#xff1a; 1.&#xff08;通过历史行为…

基于XML实现SpringIoC配置

目录 SpringIoc创建与使用的大致步骤 一.基于xml配置SpringIoc 二.基于xml配置DI 三.创建IoC容器并获取组件 SpringIoc创建与使用的大致步骤 SpringIoC的创建与使用过程分为3步 1.编写配置信息&#xff08;编写XML&#xff0c;注解、Java类&#xff09; 2.创建IoC容器&…

pytorch中torch.gather()简单理解

1.作用 从输入张量中按照指定维度进行索引采集操作&#xff0c;返回值是一个新的张量&#xff0c;形状与 index 张量相同&#xff0c;根据指定的索引从输入张量中采集对应的元素。 2.问题 该函数的主要问题主要在dim维度上&#xff0c;dim0 表示沿着第一个维度&#xff08;行…

AD中如何给过孔添加盖油

AD中如何给过孔添加盖油 画PCB时通常我们会放一些过孔&#xff0c;起到上下层信号转接或者地过孔的作用&#xff0c;当这些过孔较大较密时如果不做盖油处理&#xff0c;就会影响电气性能而且很不美观。如下图&#xff1a; 如果要盖油&#xff0c;点击对应的过孔&#xff0c;将…

解决华为云ping不通的问题

进入华为云控制台。依次选择&#xff1a;云服务器->点击服务器id->安全组->更改安全组->添加入方向规则&#xff0c;添加一个安全组规则&#xff08;ICMP&#xff09;&#xff0c;详见下图 再次ping公网ip就可以ping通了 产生这一问题的原因是ping的协议基于ICMP协…

网站和API支持HTTPS,最好在Nginx上配置

随着我们网站用户的增多&#xff0c;我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下&#xff0c;要从HTTP升级到HTTPS&#xff0c;让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手&#xff0c;从HTTP升级到HTTPS&#xff0c;同时支持静态网站和…

新媒必看!如何利用文件传输软件拿到一手资料!

在新媒体时代&#xff0c;新闻的爆发和传播已经变得非常迅速和紧迫&#xff0c;这要求新媒体从业者具备敏锐的嗅觉和快速获取第一手资料的能力。然而&#xff0c;在大数据文件传输过程中常常遇到信息滞后、泄露或丢失等问题&#xff0c;这会直接影响新闻报道的质量。为了解决这…

华为OD机试 - 求字符串中所有整数的最小和 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…