当前位置: 首页 > news >正文

qt浏览文件支持惯性

#include <QApplication>
#include <QListWidget>
#include <QScroller>
#include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建列表控件并添加示例项QListWidget listWidget;for (int i = 0; i < 100; ++i) {listWidget.addItem(QString("文件 %1").arg(i));}listWidget.resize(400, 300);listWidget.show();// 启用惯性滚动:触摸手势// QScroller::grabGesture(listWidget.viewport(), QScroller::TouchGesture);// 或者启用鼠标左键拖动惯性QScroller::grabGesture(listWidget.viewport(), QScroller::LeftMouseButtonGesture);// 获取Scroller对象并设置参数QScroller *scroller = QScroller::scroller(listWidget.viewport());QScrollerProperties properties = scroller->scrollerProperties();// 调整减速度因子(0~1,值越小惯性越长)properties.setScrollMetric(QScrollerProperties::DecelerationFactor, 0.05);// 设置最小拖动触发距离(防止误触)properties.setScrollMetric(QScrollerProperties::DragStartDistance, 0.001);scroller->setScrollerProperties(properties);return app.exec();
}

示例二:

// inertialscroller.h
#ifndef INERTIALSCROLLER_H
#define INERTIALSCROLLER_H#include <QAbstractItemView>
#include <QEvent>
#include <QMouseEvent>
#include <QObject>
#include <QPointF>
#include <QScrollBar>
#include <QTableView>
#include <QTime>
#include <QTimer>
#include <QWheelEvent>/*** @brief 惯性滚动管理器类** 为QTableView或其他QAbstractItemView子类提供惯性滚动功能。* 追踪鼠标拖拽事件并在释放后应用速度衰减算法模拟惯性滚动效果。*/
class InertialScroller : public QObject
{Q_OBJECTpublic:/*** @brief 构造函数* @param view 需要添加惯性滚动功能的视图* @param parent 父对象*/explicit InertialScroller(QAbstractItemView *view, QObject *parent = nullptr);/*** @brief 析构函数*/~InertialScroller();/*** @brief 设置衰减系数,控制惯性滚动的衰减速度* @param factor 衰减系数(0.0-1.0),越小衰减越快*/void setDecelerationFactor(qreal factor);/*** @brief 设置惯性滚动的最大初始速度* @param speed 最大速度(像素/秒)*/void setMaxSpeed(qreal speed);/*** @brief 设置停止惯性滚动的最小速度阈值* @param threshold 速度阈值(像素/秒)*/void setStopThreshold(qreal threshold);/*** @brief 设置滚轮惯性滚动的强度系数* @param factor 强度系数,数值越大惯性效果越强*/void setWheelSpeedFactor(qreal factor);/*** @brief 启用或禁用滚轮惯性滚动* @param enable 是否启用*/void setWheelInertiaEnabled(bool enable);protected:/*** @brief 事件过滤器* 拦截视图的鼠标事件处理惯性滚动*/bool eventFilter(QObject *watched, QEvent *event) override;private:QAbstractItemView *m_view;                    // 关联的视图QTimer             m_timer;                   // 惯性滚动计时器QTime              m_lastTime;                // 上次事件时间QPointF            m_lastPos;                 // 上次鼠标位置QPointF            m_velocity;                // 当前速度(x和y方向)bool               m_isPressed     = false;   // 鼠标是否按下bool               m_isScrolling   = false;   // 是否正在滚动qreal              m_deceleration  = 0.95;    // 衰减系数(0.0-1.0)qreal              m_maxSpeed      = 2000.0;  // 最大速度(像素/秒)qreal              m_stopThreshold = 10.0;    // 停止阈值(像素/秒)QVector<QPointF>   m_positions;               // 最近的鼠标位置记录QVector<qint64>    m_timestamps;              // 最近的鼠标位置时间戳qreal              m_wheelSpeedFactor = 15.0;  // 滚轮速度系数bool               m_wheelInertiaEnabled = true; // 是否启用滚轮惯性private slots:/*** @brief 执行惯性滚动步骤*/void scrollStep();/*** @brief 开始惯性滚动*/void startScrolling(const QPointF &velocity);/*** @brief 停止惯性滚动*/void stopScrolling();
};#endif  // INERTIALSCROLLER_H
// inertialscroller.cpp
#include <QDateTime>
#include <QDebug>
#include <QtMath>#include "inertialscroller.h"InertialScroller::InertialScroller(QAbstractItemView *view, QObject *parent) : QObject(parent), m_view(view)
{// 安装事件过滤器m_view->viewport()->installEventFilter(this);// 初始化计时器m_timer.setInterval(16);  // 约60FPSconnect(&m_timer, &QTimer::timeout, this, &InertialScroller::scrollStep);// 初始化历史记录容器m_positions.reserve(10);m_timestamps.reserve(10);
}InertialScroller::~InertialScroller()
{if(m_view && m_view->viewport()){m_view->viewport()->removeEventFilter(this);}m_timer.stop();
}void InertialScroller::setDecelerationFactor(qreal factor)
{// 确保值在有效范围内m_deceleration = qBound(0.1, factor, 0.99);
}void InertialScroller::setMaxSpeed(qreal speed)
{m_maxSpeed = qMax(1.0, speed);
}void InertialScroller::setStopThreshold(qreal threshold)
{m_stopThreshold = qMax(1.0, threshold);
}void InertialScroller::setWheelSpeedFactor(qreal factor)
{m_wheelSpeedFactor = qMax(1.0, factor);
}void InertialScroller::setWheelInertiaEnabled(bool enable)
{m_wheelInertiaEnabled = enable;
}bool InertialScroller::eventFilter(QObject *watched, QEvent *event)
{if(watched != m_view->viewport())return false;switch(event->type()){case QEvent::MouseButtonPress: {QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);if(mouseEvent->button() == Qt::LeftButton){stopScrolling();m_isPressed = true;m_lastPos   = mouseEvent->pos();m_lastTime.start();// 清空历史记录m_positions.clear();m_timestamps.clear();// 记录初始位置和时间m_positions.append(mouseEvent->pos());m_timestamps.append(QDateTime::currentMSecsSinceEpoch());}break;}case QEvent::MouseMove: {if(m_isPressed){QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);QPointF      currentPos = mouseEvent->pos();// 计算移动距离QPointF delta = m_lastPos - currentPos;// 添加到历史记录m_positions.append(currentPos);m_timestamps.append(QDateTime::currentMSecsSinceEpoch());// 仅保留最近的5个记录点while(m_positions.size() > 5){m_positions.removeFirst();m_timestamps.removeFirst();}// 滚动视图QScrollBar *vScrollBar = m_view->verticalScrollBar();QScrollBar *hScrollBar = m_view->horizontalScrollBar();if(vScrollBar && vScrollBar->isVisible()){vScrollBar->setValue(vScrollBar->value() + delta.y());}if(hScrollBar && hScrollBar->isVisible()){hScrollBar->setValue(hScrollBar->value() + delta.x());}m_lastPos = currentPos;}break;}case QEvent::MouseButtonRelease: {if(m_isPressed){QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);if(mouseEvent->button() == Qt::LeftButton){m_isPressed = false;// 如果有足够的历史数据来计算速度if(m_positions.size() >= 2){// 使用最后几个点的平均速度QPointF totalVelocity(0, 0);int     count = 0;for(int i = 1; i < m_positions.size(); ++i){qint64 timeDelta = m_timestamps[i] - m_timestamps[i - 1];if(timeDelta > 0){QPointF posDelta = m_positions[i - 1] - m_positions[i];// 速度 = 距离/时间,单位为像素/秒QPointF velocity = posDelta * (1000.0 / timeDelta);totalVelocity += velocity;count++;}}if(count > 0){QPointF avgVelocity = totalVelocity / count;// 限制最大速度qreal speedX = qBound(-m_maxSpeed, avgVelocity.x(), m_maxSpeed);qreal speedY = qBound(-m_maxSpeed, avgVelocity.y(), m_maxSpeed);// 如果速度足够大,启动惯性滚动QPointF finalVelocity(speedX, speedY);qreal   speed = qSqrt(speedX * speedX + speedY * speedY);if(speed > m_stopThreshold){startScrolling(finalVelocity);}}}}}break;}case QEvent::Wheel: {// 如果滚轮惯性被禁用,不拦截事件if(!m_wheelInertiaEnabled){stopScrolling();return false;}// 处理鼠标滚轮事件产生惯性滚动QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(event);// 停止当前的惯性滚动stopScrolling();// 计算滚轮滚动的速度和方向QPoint pixelDelta = wheelEvent->pixelDelta();QPoint angleDelta = wheelEvent->angleDelta();// 优先使用像素增量,如果没有则使用角度增量QPointF scrollAmount;if(!pixelDelta.isNull()){scrollAmount = QPointF(pixelDelta);} else if(!angleDelta.isNull()){// 标准鼠标滚轮:角度转为像素(大约8度为一个标准滚动单位)scrollAmount = QPointF(angleDelta) / 8.0;}// 应用滚动方向(正数向下/右,负数向上/左)scrollAmount = -scrollAmount;// 缩放滚动量来创建合适的惯性效果QPointF velocity = scrollAmount * m_wheelSpeedFactor;// 如果速度足够大,开始惯性滚动qreal speed = qSqrt(velocity.x() * velocity.x() + velocity.y() * velocity.y());if(speed > m_stopThreshold){startScrolling(velocity);// 先手动执行一次滚动,让响应更快QScrollBar *vScrollBar = m_view->verticalScrollBar();QScrollBar *hScrollBar = m_view->horizontalScrollBar();if(vScrollBar && vScrollBar->isVisible() && !angleDelta.isNull()){vScrollBar->setValue(vScrollBar->value() + angleDelta.y() / 120 * vScrollBar->singleStep());}if(hScrollBar && hScrollBar->isVisible() && !angleDelta.isNull()){hScrollBar->setValue(hScrollBar->value() + angleDelta.x() / 120 * hScrollBar->singleStep());}return true;  // 拦截滚轮事件,自己处理}break;}default:break;}// 继续传递事件,不拦截return false;
}void InertialScroller::scrollStep()
{if(!m_isScrolling || m_isPressed)return;// 减速m_velocity *= m_deceleration;// 计算滚动距离qreal dx = m_velocity.x() * (m_timer.interval() / 1000.0);qreal dy = m_velocity.y() * (m_timer.interval() / 1000.0);// 应用滚动QScrollBar *vScrollBar = m_view->verticalScrollBar();QScrollBar *hScrollBar = m_view->horizontalScrollBar();if(vScrollBar && vScrollBar->isVisible()){vScrollBar->setValue(vScrollBar->value() + qRound(dy));}if(hScrollBar && hScrollBar->isVisible()){hScrollBar->setValue(hScrollBar->value() + qRound(dx));}// 如果速度足够小,停止滚动qreal speed = qSqrt(m_velocity.x() * m_velocity.x() + m_velocity.y() * m_velocity.y());if(speed < m_stopThreshold){stopScrolling();}
}void InertialScroller::startScrolling(const QPointF &velocity)
{if(m_isScrolling)return;m_velocity    = velocity;m_isScrolling = true;m_timer.start();
}void InertialScroller::stopScrolling()
{if(!m_isScrolling)return;m_timer.stop();m_isScrolling = false;m_velocity    = QPointF(0, 0);
}

相关文章:

qt浏览文件支持惯性

#include <QApplication> #include <QListWidget> #include <QScroller> #include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建列表控件并添加示例项QListWidget listWidget;for (int i 0; i <…...

算子窗口操作

抠图 (提取图像感兴趣的区域) * 使用halcon 抠图* 窗体属性设设置: 设置窗体绘制图案的模式 magrin边框模式(只有一个边框) * fill填充模式(边框内部会有一个遮罩层) dev_set_draw (fill)* 设置颜色 dev_set_color (green) * 设置线宽dev_set_line_width (5)read_image (Im…...

如何提灯验车

✅ 重点  车标倾斜特别严重  导航定位不准  发动机顿挫异响  自动门把手关闭时异响  底盘有划痕和主驾位与扶手箱位置间隙过小磨损  蓝牙钥匙解锁异常&#xff0c;开关解锁不灵敏  空调无法制冷  灯罩有划痕  开启大灯就有嗡嗡嗡的异响 ✅ 一、文件与证件检…...

人工智能在生物医学研究中的创新应用

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;其在生物医学领域的应用逐渐成为研究热点。AI不仅为生物医学研究提供了强大的工具&#xff0c;还在疾病诊断、药物研发、基因编辑等方面展现出巨大的潜力。本文将探讨人工智能在生物医学研究中的创新应用&…...

迁移学习实战:用预训练模型解决小样本图像分类

🚀 迁移学习实战:用预训练模型解决小样本图像分类(PyTorch实现) 当我们没有成千上万的训练样本时,如何训练一个表现良好的图像分类模型?答案是——迁移学习。本篇将带你用 PyTorch 快速上手迁移学习,用预训练模型(如 ResNet18)解决小样本分类问题。 🧠 一、什么是迁…...

html,js获取扫码设备的输入内容

<script type"text/javascript"><!-- window.onload function () {// 获取扫描的二维码内容 var code ""; var lastTime, nextTime; var lastCode, nextCode; document.onkeypress function (e) { nextCode e.which; ne…...

项目执行中缺乏风险管理,如何预防潜在问题?

要预防潜在问题&#xff0c;必须在项目执行中融入建立全面的风险识别机制、制定应对策略、实施动态监控、强化团队风险意识、定期评估与复盘。其中&#xff0c;建立全面的风险识别机制至关重要。项目初期若未进行系统性的风险识别&#xff0c;就很难在项目过程中及时应对变化&a…...

树形展示三级分类数据

vue3 实现多级分类_产品设计 平台端添加多个二级三级分类的页面-CSDN博客...

大模型如何助力数学可视化?

大家好&#xff0c;我是 i 学习的老章 在数学学习和教学中&#xff0c;将抽象概念可视化对于理解至关重要。Manim 是一个强大的数学动画引擎&#xff0c;由著名数学科普视频作者 3Blue1Brown 开发并广为人知。 老章较早之前就介绍过 manim&#xff1a;B 站上爆红的数学视频&a…...

什么是endpoints?

在 Kubernetes 中&#xff0c;Endpoints 是一个资源对象&#xff0c;它表示服务&#xff08;Service&#xff09;到 Pod 的网络连接。 Endpoints 的主要作用是将服务的虚拟 IP 地址映射到实际的 Pod IP 地址&#xff0c;从而实现服务发现和负载均衡。 1.Endpoints 的作用 服务…...

基于 Redis 实现短信验证码登录功能的完整方案

&#x1f9f1; 一、技术栈与依赖配置 使用 Spring Boot Redis 实现短信验证码登录&#xff0c;以下是推荐的 Maven 依赖&#xff1a; <dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><ar…...

监控易一体化运维:拥有全部核心技术,助力国产化信创运维

在数字化转型浪潮与信创产业蓬勃发展的当下&#xff0c;企业对运维系统的要求愈发严苛。随着数字化领域的巨大变迁&#xff0c;一款强大且适配信创环境的运维系统对企业的重要性不言而喻。今天&#xff0c;让我们一同深度剖析监控易系统在信创领域展现出的卓越优势。 信创产业&…...

微 PE , USM 魔术师两款 PE 对比

微 PE 和 USM 魔术师两款 PE 各有特点&#xff1a; 纯净度 微 PE&#xff1a;没有植入强制性、商业性软件和链接&#xff0c;也没有病毒和木马&#xff0c;非常纯净。USM 魔术师&#xff1a;同样无广告、无流氓、无捆绑、无后门&#xff0c;从官方途径下载能保证纯净度。 功能…...

测试模版1

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...

elementUI 中el-date-picker和el-select的样式调整

1. el-date-picker <el-date-picker class"select1" size"small" v-model"timeRangeArr" type"daterange" align"right" unlink-panels range-separator"至" start-placeholder"开始日期" end-pla…...

基于亚马逊云科技构建音视频直播审核方案

1. 前言 随着互联网内容形态的多样化发展&#xff0c;用户生成内容&#xff08;UGC&#xff09;呈现爆发式增长。社交平台、直播、短视频、语聊房等应用场景中&#xff0c;海量的音视频内容需要进行实时审核&#xff0c;以维护平台安全与用户体验。 然而&#xff0c;企业在构…...

Vue3 组件之间传值

在 Vue3 中&#xff0c;组件之间的数据传递主要有以下几种方式&#xff0c;适用于不同的场景&#xff1a; 一、父组件向子组件传值&#xff1a;props 1. 子组件定义 props <!-- ChildComponent.vue --> <script setup> // 组合式 API&#xff08;推荐&#xff09…...

深入理解用于中断控制的 NVIC 寄存器

NVIC 中有多个用于中断控制的寄存器&#xff08;异常类型 16~255&#xff09;&#xff0c;这些寄存器位于系统控制空间&#xff08;SCS&#xff09;地址区域。下表是这些寄存器的概览&#xff1a; 除了软件触发寄存器&#xff08;STIR&#xff09;外&#xff0c;所有这些寄存器…...

Podman(Pod Manager)简介

Podman 简介 Podman&#xff08;Pod Manager&#xff09;是一个开源的容器管理工具&#xff0c;由红帽&#xff08;Red Hat&#xff09;开发&#xff0c;用于替代 Docker&#xff0c;支持运行、管理 OCI&#xff08;Open Container Initiative&#xff09;容器和容器镜像。它设…...

HarmonyOS NEXT端云一体化工程目录结构

视频课程学习报名入口:HarmonyOS NEXT端云一体化开发 端云一体化开发工程由端开发工程(Application)和云开发工程(CloudProgram)两大核心模块构成。 1)端开发工程目录结构 端开发工程主要用于开发应用端侧的业务代码,通用云开发模板的端开发工程目录结构如下图所示: …...

【C++ 真题】P1075 [NOIP 2012 普及组] 质因数分解

P1075 [NOIP 2012 普及组] 质因数分解 题目描述 已知正整数 n n n 是两个不同的质数的乘积&#xff0c;试求出两者中较大的那个质数。 输入格式 输入一个正整数 n n n。 输出格式 输出一个正整数 p p p&#xff0c;即较大的那个质数。 输入输出样例 #1 输入 #1 21输…...

力扣热题100,力扣148.排序链表力扣.26找出字符串中第一个匹配项的下标力扣146.LRU缓存序列管理器

目录 力扣148.排序链表 力扣.26找出字符串中第一个匹配项的下标 力扣146.LRU缓存 序列管理器 力扣148.排序链表 那个O1,暂时我没有考虑&#xff0c;但是这个nlogn,我就想什么时候会有log呢&#xff0c;应该是2的次幂方向思考&#xff0c;一说2&#xff0c;是否能想到2分呢&…...

防火墙高可靠性

防火墙高可靠性技术概述 防火墙高可靠性技术分为两类&#xff1a;设备高可靠性和链路高可靠性 防火墙双机热备 双机热备概述及相关协议 HRP协议&#xff1a;即Huawei Redundancy Protocol&#xff0c;主要用于实现防火墙双机之间关键配置命令和状态化信息的备份&#xff0c;…...

C++ stack对象创建、入栈、获取栈顶

stack对象创建直接调用C对应的<stack>&#xff0c;进行创建 #include<iostream> #include<stack>using namespace std;int main() {// 1 默认构造函数stack<int> stk1;// 2 拷贝构造函数stack<int> stk2;stk1 stk2;return 0;} 入栈操作有一条…...

x-cmd install | Pillager:Go 语言打造的敏感信息文件系统扫描利器

目录 Pillager 的独特优势安装Pillager 的应用场景Pillager 的核心功能 还在为文件系统中潜在的敏感信息泄露而担忧吗&#xff1f;Pillager 是一款由 Go 语言编写的强大工具&#xff0c;旨在帮助你轻松扫描文件系统&#xff0c;发现隐藏的密钥、密码、API 令牌等敏感信息。 Pil…...

第9.1讲、Tiny Encoder Transformer:极简文本分类与注意力可视化实战

项目简介 本项目实现了一个极简版的 Transformer Encoder 文本分类器&#xff0c;并通过 Streamlit 提供了交互式可视化界面。用户可以输入任意文本&#xff0c;实时查看模型的分类结果及注意力权重热力图&#xff0c;直观理解 Transformer 的内部机制。项目采用 HuggingFace …...

asp.net web form nlog的安装

一、安装NuGet包 ‌核心包安装‌ NLog提供日志记录核心功能 NLog.Config自动生成默认配置文件模板 配置NLog文件 ‌配置文件创建‌ 项目根目录自动生成NLog.config文件&#xff08;通过NuGet安装NLog.Config时创建&#xff09; <?xml version"1.0" encoding&…...

定时器的两种实现方式

1、基于优先级队列/堆 队列是先进先出&#xff0c;优先级队列是优先级越高就存放在队列之前&#xff0c;我们可以将过期时间越早设置为优先级越高&#xff0c;那么临近过期时间的任务就会在队列前面&#xff0c;距离过期时间越晚的任务就在队列后面。 可以分配一个线程&#…...

2025.05.21华为暑期实习机考真题解析第一题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 智能云任务分发系统 问题描述 卢小姐负责一家云计算公司的任务分发系统开发。该系统需要根据任务优先级和到达顺序进行智能调度,支持以下两种操作: 添加任务 add task_id pri…...

计算机网络-MPLS VPN报文转发

上一章学习了MPSL VPN的路由交互过程&#xff0c;VPN间学习到路由之后可以进行报文的转发了。 一、MPLS VPN报文转发过程 以图中用户X的站点B访问站点A的192.168.1.0/24网段为例&#xff0c;报文转发过程如下&#xff1a; 1.CE3上存在到192.168.1.0/24网段路由&#xff0c;发…...

关于sql 查询性能优化的小经验

最近接到一些sql优化的任务。数据库类型&#xff1a;DB2 有一个长sql查询效率低&#xff0c;大概要几十秒&#xff0c;大概查询逻辑如下&#xff1a; select * from tableA a where exists (select 1 from tableB b where a.idb.id ) or exists (select 1 from tableC c whe…...

Pandas:数据分析步骤、分组函数groupby和基础画图

本文目录&#xff1a; 一、概念&#xff08;一&#xff09;数据分析的基本步骤&#xff08;二&#xff09;两个属性&#xff1a;loc[行标签,列标签 ] 和 iloc[行索引位置,列索引位置 ]1.基本规则2.两属性的相同和不同对比 二、加载数据&#xff08;一&#xff09;按列加载数据&…...

游戏引擎学习第302天:使用精灵边界进行排序

在 game_render_group.cpp 中&#xff1a;正确计算 GetBoundFor() 里的 SpriteBound 值 我们正在进行游戏的排序问题调试。虽然这是一个二维游戏&#xff0c;但包含一些三维元素&#xff0c;因此排序变得比较复杂和棘手。混合二维和三维元素时&#xff0c;需要依赖一些比较主观…...

【完整版】基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎

功能说明 源码简介与安装环境说明&#xff1a; 开源交易所&#xff0c;基于laravel开发的交易所 | BTC交易所 | ETH交易所 | 交易所 | 交易平台 | 撮合交易引擎。本项目有完整的撮合交易引擎源码、后台管理&#xff08;后端前端&#xff09;、前台&#xff08;交易页面、活动页…...

DeepSeek赋能智能家居:构建高智能、低延迟的物联网生态

一、DeepSeek技术架构解析 DeepSeek采用分层架构设计,兼容边缘计算与云端协同,核心模块包括: 1. 设备接入层 多协议适配:支持MQTT、CoAP、Zigbee、WiFi等主流协议,内置设备描述语言(DDL)解析器,可自动发现并注册新设备。数据预处理:对传感器数据(如温度、光照、加速…...

鸿蒙开发:应用上架第二篇,申请发布证书

前言 本文基于Api13 通过第一篇文章&#xff0c;我们拿到了密钥库.p12文件和证书请求csr文件&#xff0c;这两个文件都是非常重要的&#xff0c;一定要保存好&#xff0c;我们也基本知道了应用的打包&#xff0c;签名信息文件是必须的&#xff0c;而对于签名信息&#xff0c;也…...

Android Framework开发环境搭建

本文分享下在Windows和ubuntu系统搭建framework 开发环境的过程。 Window系统版本win11 一.在windows搭建android framework开发环境。 到下面网站下载android studio 。 developer.android.google.cn/studio?hlzh-cn 在as 的sdk manager 中安装SDK Platform和SDK Tools。 2…...

关于收集 Android Telephony 网络信息的设计思考

需求 收集service state change、ims fail 等相关无线移动网络状态的信息,并保存,对外提供数据查询、删除、更新的功能。 架构设计与实现建议 1. 架构设计建议 针对在 Android Telephony 数据模块中实现网络状态信息收集并调用 Provider App 存储的需求,建议采用 分层的…...

弱网服务器群到底有什么用

在当今数字化的时代&#xff0c;大家都在追求高速、稳定的网络体验&#xff0c;但你是否想过&#xff0c;弱网服务器群其实也有着不可小觑的作用。让我们来聊聊什么是弱网服务器群。简单来说&#xff0c;它是一组在网络条件相对较差情况下运行的服务器集合。 弱网服务器群组是一…...

如何提高独立服务器的安全性?

独立服务器相对于其它服务器来说&#xff0c;整体的硬件设备都是独立的同时还有着强大的服务器性能&#xff0c;其中CPU设备能够决定着服务器的运算能力&#xff0c;所以独立服务器的安全性受到企业格外的重视&#xff0c;严重的话会给企业造成巨大的资金损失。 那么&#xff0…...

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd 1.1.安装命令 sudo apt update sudo apt install vsftpd 1.2.备份原始配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 1.3.配置 vsftpd 编辑配置文件 /etc/vsftpd.conf&#xff1a; sudo vim /etc/vsftpd.conf 将以下参数修改为对应值&#xff…...

在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南

当然可以&#xff01;以下是一篇结构清晰、语言通俗易懂的技术博客草稿&#xff0c;供你参考和使用&#xff1a; 在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南 背景介绍 最近在对一台内网的 OpenEuler-22.03 服务器进行安全扫描时&#xff0c;发现其 SSH 版本存在…...

用java实现内网通讯,可多开客户端链接同一个服务器

创建一个客户端&#xff1a;package Socket;import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Scanner;/* 聊天案例客户端 */ public class Client {private Socket socket;/**…...

蓝耘服务器部署ppocr-gpu项目

一、存在的问题。 conda install 总是访问失败。 二、云服务器选择 三、安装Anaconda3 进入云服务器后删除minconda文件夹 官网&#xff1a; https://repo.anaconda.com/archive/ 在里面找到自己系统的安装包&#xff0c;然后右击复制链接安装。 一定要选择Anaconda,因为…...

离线服务器算法部署环境配置

本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境&#xff0c;包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker&#xff0c;以便顺利部署深度学习算法。 前提条件&#xff1a; 目标离线服务器已安装操作系统&#xff08;本文以Ubuntu 18.04为例&#xff09…...

现代人工智能系统的实用设计模式

关键要点 AI设计模式是为现代AI驱动的软件中常见问题提供的可复用解决方案&#xff0c;帮助团队避免重复造轮子。我们将其分为五类&#xff1a;提示与上下文&#xff08;Prompting & Context&#xff09;、负责任的AI&#xff08;Responsible AI&#xff09;、用户体验&…...

数据集下载并保存本地进行加载

一、huggingface 1、下载数据集 #数据集下载 from datasets import load_datasetds load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "zh",cache_dir ./dir)输出测试 2、保存数据集 #数据保存 ds.save_to_disk("./local_datase…...

物流项目第六期(短信微服务——对接阿里云第三方短信服务JAVA代码实现、策略模式 + 工厂模式的应用)

前五期&#xff1a; 物流项目第一期&#xff08;登录业务&#xff09;-CSDN博客 物流项目第二期&#xff08;用户端登录与双token三验证&#xff09;-CSDN博客 物流项目第三期&#xff08;统一网关、工厂模式运用&#xff09;-CSDN博客 物流项目第四期&#xff08;运费模板列…...

嵌入式学习的第二十五天-系统编程-文件相关函数-标准I0+文件IO

一、文件的读和写 1.fwrite&#xff08;读&#xff09; size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能&#xff1a;从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在的本地内存中。 参数&#xff1a;ptr 要存储数据的本地…...

MySQL 8.0 OCP 1Z0-908 171-180题

Q171.Examine this MySQL client command to connect to a remote database: mysql-h remote-example.org-u root–protocolTCP–ssl-mode Which two–ss1-mode values will ensure that an X.509-compliant certificate will be used to establish the SSL/TLS connection to …...