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

Qt实现类似淘宝商品看板的界面,带有循环翻页以及点击某页跳转的功能

 效果如下:

#ifndef ModelDashboardGroup_h__
#define ModelDashboardGroup_h__#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QWidget>#include <QLabel>
#include <QWidget>
#include <QMouseEvent>class ClickableLabel : public QLabel {Q_OBJECTpublic:explicit ClickableLabel(QWidget* parent = nullptr) : QLabel(parent) {}signals:void clicked();protected:void mousePressEvent(QMouseEvent* event) override{if (event->button() == Qt::LeftButton) {emit clicked();}QLabel::mousePressEvent(event);}
};QT_BEGIN_NAMESPACE
namespace Ui { class CModelDashboardGroup; };
QT_END_NAMESPACEclass CModelDashboardGroup : public QWidget
{Q_OBJECTpublic:CModelDashboardGroup(QWidget *parent = nullptr);~CModelDashboardGroup();void SetItemWidgetInfos(const std::vector<std::pair<QString, QString> >& vecItemWidgetInfo);void AddItemWidgetInfo(const QString& strModelName, const QString& strModelImagePath);// 设置每页展示的模型图片数量void SetPerPageItemsNumber(int nNumber);// 设置展示页数的Label数量void SetMaxPageLabelCount(int nMaxPages);// 设置每行展示的模型图片的数量void SetPerColItemsNumber(int nNumber);private:void Init();void AddItemToGrid(int nIndex);void UpdateGrid();void UpdatePageLabels();int CalculateStartPage() const;private slots:void SlotPageButtonClicked();void SlotPageLabelClicked(int nIndex);private:Ui::CModelDashboardGroup *ui;std::vector<std::pair<QString, QString> > m_vecItemWidgetInfo;// 第一个QString表示模型名称,第二个QString表示模型展示图片路径QGridLayout* m_pGridLayout;QHBoxLayout* m_pPageControlLayout;QPushButton* m_pPrevButton;QPushButton* m_pNextButton;QList<ClickableLabel*> m_listPageLabels;int m_nCurrentPage;int m_nPerPageItemsNumber;int m_nPerRowPageItemsNumber;int m_nTotalPages;int m_nMaxPageLabels;
};#endif // ModelDashboardGroup_h__
#include "ui_ModelDashboardGroup.h"#include "ModelDashboardGroup.h"
#include "ModelDashboard.h"
#include <QGraphicsOpacityEffect>CModelDashboardGroup::CModelDashboardGroup(QWidget *parent): QWidget(parent), ui(new Ui::CModelDashboardGroup()), m_pGridLayout(NULL), m_pPrevButton(NULL), m_pNextButton(NULL), m_nCurrentPage(0), m_nPerPageItemsNumber(10), m_nPerRowPageItemsNumber(5), m_nTotalPages(1), m_nMaxPageLabels(5)
{ui->setupUi(this);//setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明Init();// 测试数据if (1){std::vector<std::pair<QString, QString> > vecItemWidgetInfo;for (int i = 1; i <= 105; ++i){  // 增加商品数量以测试分页vecItemWidgetInfo.push_back(std::make_pair(QString::fromLocal8Bit("模型%1").arg(i), QString::fromLocal8Bit(":/dotnetIcon.png")));}SetItemWidgetInfos(vecItemWidgetInfo);}else{UpdatePageLabels();UpdateGrid();}
}CModelDashboardGroup::~CModelDashboardGroup()
{delete ui;
}void CModelDashboardGroup::SetItemWidgetInfos(const std::vector<std::pair<QString, QString>>& vecItemWidgetInfo)
{m_vecItemWidgetInfo.clear();m_vecItemWidgetInfo = vecItemWidgetInfo;m_nTotalPages = (m_nPerPageItemsNumber + static_cast<int>(m_vecItemWidgetInfo.size()) - 1) / m_nPerPageItemsNumber;UpdatePageLabels();UpdateGrid();
}void CModelDashboardGroup::AddItemWidgetInfo(const QString& strModelName, const QString& strModelImagePath)
{m_vecItemWidgetInfo.push_back(std::make_pair(strModelName, strModelImagePath));m_nTotalPages = (m_nPerPageItemsNumber + static_cast<int>(m_vecItemWidgetInfo.size()) - 1) / m_nPerPageItemsNumber;UpdatePageLabels();UpdateGrid();
}void CModelDashboardGroup::SetPerPageItemsNumber(int nNumber)
{m_nPerPageItemsNumber = nNumber;
}void CModelDashboardGroup::SetMaxPageLabelCount(int nMaxPages)
{m_nMaxPageLabels = nMaxPages;
}void CModelDashboardGroup::SetPerColItemsNumber(int nNumber)
{m_nPerRowPageItemsNumber = nNumber;
}void CModelDashboardGroup::Init()
{QVBoxLayout* pMainLayout = new QVBoxLayout(this);QWidget* pGridWidget = new QWidget(this);m_pGridLayout = new QGridLayout(pGridWidget);m_pGridLayout->setSpacing(10);m_pPageControlLayout = new QHBoxLayout();m_pPrevButton = new QPushButton(QString::fromLocal8Bit("上一页"));m_pPrevButton->setFixedSize(QSize(75, 37));m_pPrevButton->setCursor(Qt::PointingHandCursor);m_pPrevButton->setStyleSheet("QPushButton {""width: 75px;""height: 37px;""background-color: #0097ee;""border-radius: 5px;""color: white;""font-size:10pt;""font-weight: bold;""font-family: Microsoft YaHei;""padding-bottom:2px;""}");m_pNextButton = new QPushButton(QString::fromLocal8Bit("下一页"));m_pNextButton->setFixedSize(QSize(75, 37));m_pNextButton->setCursor(Qt::PointingHandCursor);m_pNextButton->setStyleSheet("QPushButton {""width: 75px;""height: 37px;""background-color: #0097ee;""border-radius: 5px;""color: white;""font-size:10pt;""font-weight: bold;""font-family: Microsoft YaHei;""padding-bottom:2px;""}");//QLabel* pPageLabel = new QLabel("1");connect(m_pPrevButton, &QPushButton::clicked, this, &CModelDashboardGroup::SlotPageButtonClicked);connect(m_pNextButton, &QPushButton::clicked, this, &CModelDashboardGroup::SlotPageButtonClicked);m_pPageControlLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));m_pPageControlLayout->addWidget(m_pPrevButton);m_pPageControlLayout->addWidget(m_pNextButton);m_pPageControlLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));pMainLayout->addWidget(pGridWidget);pMainLayout->addLayout(m_pPageControlLayout);
}void CModelDashboardGroup::AddItemToGrid(int nIndex)
{CModelDashboard* pModelDashboard = new CModelDashboard();// 自定义widget替换为自己的类if (nIndex >= 0 && nIndex < m_vecItemWidgetInfo.size()){pModelDashboard->SetModelDisPlayName(m_vecItemWidgetInfo[nIndex].first);pModelDashboard->SetModelDisPlayImage(m_vecItemWidgetInfo[nIndex].second);}else{// 添加示例商品pModelDashboard->SetModelDisPlayName(QString::fromLocal8Bit("模型"));pModelDashboard->SetModelDisPlayImage(QString::fromLocal8Bit(":/dotnetIcon.png"));}int nRow = (m_pGridLayout->count() / m_nPerRowPageItemsNumber);  // 计算行数int nCol = (m_pGridLayout->count() % m_nPerRowPageItemsNumber);  // 计算列数m_pGridLayout->addWidget(pModelDashboard, nRow, nCol);
}void CModelDashboardGroup::UpdateGrid()
{// 清空现有网格布局QLayoutItem* pItem;while ((pItem = m_pGridLayout->takeAt(0)) != NULL){delete pItem->widget();delete pItem;}int nStartIndex = m_nCurrentPage * m_nPerPageItemsNumber;int nEndIndex = qMin(nStartIndex + m_nPerPageItemsNumber, static_cast<int>(m_vecItemWidgetInfo.size()));// 添加实际模型for (int i = nStartIndex; i < nEndIndex; ++i){AddItemToGrid(i);}// 如果最后一页商品不足一页,则添加示例int nNumPlaceholders = m_nPerPageItemsNumber - (nEndIndex - nStartIndex);for (int i = 0; i < nNumPlaceholders; ++i){AddItemToGrid(-1);  // 使用负索引来添加示例}UpdatePageLabels();m_pPrevButton->setEnabled(m_nTotalPages > 1); // Enable/disable based on totalPagesm_pNextButton->setEnabled(m_nTotalPages > 1); // Enable/disable based on totalPages
}void CModelDashboardGroup::UpdatePageLabels()
{// 清除现有的页码标签for (int i = 0; i < m_listPageLabels.size(); i++){ClickableLabel* pClickableLabel = m_listPageLabels.at(i);if (NULL != pClickableLabel){m_pPageControlLayout->removeWidget(pClickableLabel);pClickableLabel->deleteLater();}}m_listPageLabels.clear();// 在 items 为空时至少显示一个页码标签int nNumLabels = qMax(1, qMin(m_nTotalPages, m_nMaxPageLabels));int nStartPage = CalculateStartPage();for (int i = 0; i < nNumLabels; ++i){ClickableLabel* pLabel = new ClickableLabel();pLabel->setAlignment(Qt::AlignCenter);pLabel->setStyleSheet("QLabel {""width: 37px;""height: 37px;""background-color: #293d70;""border-radius: 5px;""color: white;""font-size:10pt;""font-weight: bold;""font-family: Microsoft YaHei;""padding-bottom:2px;""}");//QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;//opacityEffect->setOpacity(0.4);//pLabel->setGraphicsEffect(opacityEffect);pLabel->setFixedSize(QSize(37, 37));pLabel->setText(QString::number(nStartPage + i + 1));pLabel->setCursor(Qt::PointingHandCursor);m_listPageLabels.append(pLabel);m_pPageControlLayout->insertWidget(m_pPageControlLayout->count() - 2, pLabel); // 插入在按钮之前connect(pLabel, &ClickableLabel::clicked, this, [this, i](){SlotPageLabelClicked(i);});if (nStartPage + i == m_nCurrentPage){pLabel->setStyleSheet("QLabel {""width: 37px;""height: 37px;""background-color: #0097ee;""border-radius: 5px;""color: white;""font-size:10pt;""font-weight: bold;""font-family: Microsoft YaHei;""padding-bottom:2px;""}");}}
}int CModelDashboardGroup::CalculateStartPage() const
{if (m_nTotalPages <= m_nMaxPageLabels){return 0;}if (m_nCurrentPage <= m_nMaxPageLabels / 2){return 0;}if (m_nCurrentPage >= m_nTotalPages - (m_nMaxPageLabels / 2)){return m_nTotalPages - m_nMaxPageLabels;}return m_nCurrentPage - (m_nMaxPageLabels / 2);
}void CModelDashboardGroup::SlotPageButtonClicked()
{QPushButton* pPushButton = qobject_cast<QPushButton*>(sender());if (pPushButton == m_pPrevButton){// 循环到最后一页m_nCurrentPage = (m_nCurrentPage > 0) ? (m_nCurrentPage - 1) : (m_nTotalPages - 1);}else if (pPushButton == m_pNextButton){// 循环到第一页m_nCurrentPage = (m_nCurrentPage < m_nTotalPages - 1) ? (m_nCurrentPage + 1) : 0;}UpdatePageLabels();UpdateGrid();
}void CModelDashboardGroup::SlotPageLabelClicked(int nIndex)
{int nStartPage = CalculateStartPage();int nNewPage = nStartPage + nIndex;if (nNewPage >= 0 && nNewPage < m_nTotalPages){m_nCurrentPage = nNewPage;UpdatePageLabels();UpdateGrid();}
}

修改AddItemToGrid接口中的CModelDashboard类即可,修改为自己需要展示的widget。

以下为一个示例:

 

#pragma once#include <QWidget>
#include "ui_ModelDashboard.h"QT_BEGIN_NAMESPACE
namespace Ui { class CModelDashboard; };
QT_END_NAMESPACEclass CModelDashboard : public QWidget
{Q_OBJECTpublic:CModelDashboard(QWidget *parent = nullptr);~CModelDashboard();void SetModelDisPlayImage(const QString& strImagePath);void SetModelDisPlayName(const QString& strText);private:Ui::CModelDashboard *ui;
};
#include "ModelDashboard.h"CModelDashboard::CModelDashboard(QWidget *parent): QWidget(parent), ui(new Ui::CModelDashboard())
{ui->setupUi(this);
}CModelDashboard::~CModelDashboard()
{delete ui;
}void CModelDashboard::SetModelDisPlayImage(const QString& strImagePath)
{QPixmap pixmap(strImagePath);ui->labelImage->setPixmap(pixmap);
}void CModelDashboard::SetModelDisPlayName(const QString& strText)
{ui->labelText->setText(strText);
}

相关文章:

Qt实现类似淘宝商品看板的界面,带有循环翻页以及点击某页跳转的功能

效果如下&#xff1a; #ifndef ModelDashboardGroup_h__ #define ModelDashboardGroup_h__#include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QWidget>#include <QLabel> #include <QWidget> #include <QMou…...

2024下半年国际学术会议一览表

在科技与人文的交汇点&#xff0c;2024年的国际学术会议季即将拉开帷幕&#xff0c;一系列聚焦于计算机科学与人工智能、工程与技术、教育与社会科学的盛会&#xff0c;不仅展示了全球学术研究的最新成果&#xff0c;更促进了跨学科交流与合作&#xff0c;为未来的科技发展与社…...

serial靶场

项目地址 https://download.vulnhub.com/serial/serial.zip 实验过程 将下载好的靶机导入到VMware中&#xff0c;设置网络模式为NAT模式&#xff0c;然后开启靶机虚拟机 使用C段扫描&#xff0c;获取靶机IP地址 arp-scan -l 扫描一下端口 nmap -sV -p- 192.168.48.149 查看…...

如何在Vue3项目中引入并使用Echarts图表

在Vue 3项目中引入并使用ECharts图表&#xff0c;你可以通过npm或yarn来安装ECharts&#xff0c;然后在Vue组件中引入并使用它。以下是一个基本的步骤指南&#xff1a; 1. 安装ECharts 首先&#xff0c;你需要在你的Vue 3项目中安装ECharts。打开你的终端或命令提示符&#x…...

C# 子类、接口

栏目总目录 子类 继承的概念 继承机制&#xff1a;C#支持单继承&#xff0c;即一个类只能直接继承自一个基类。但基类本身可以继承自另一个类&#xff0c;从而实现继承链。继承关键字&#xff1a;使用冒号&#xff08;:&#xff09;表示继承关系&#xff0c;子类在声明时指定…...

Qt实现圆形窗口

重新实现paintEvent()函数。 效果如下&#xff1a; 效果为蓝色区域&#xff0c;背景是vs接面&#xff0c;代码直接复制可用&#xff0c;留给有需要的人。 #ifndef CircleWidget_h__ #define CircleWidget_h__#include <QWidget>class CCircleWidget : public QWidget {Q…...

LeetCode 算法:有效的括号 c++

原题链接&#x1f517;&#xff1a;有效的括号 难度&#xff1a;简单⭐️ 题目 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; …...

react和vue的diff算法的差别

React 的 Diff 算法 React 的 diff 算法主要基于以下几个原则&#xff1a; 同层比较&#xff1a; React 只会比较同一层级的节点&#xff0c;不会跨层级比较。假设跨层级的变化较少&#xff0c;从而简化了算法&#xff0c;提高了性能。 深度优先遍历&#xff1a; React 采用深…...

算法【滑动窗口】

滑动窗口指的是维持左、右边界都不回退的一段范围&#xff0c;来求解很多子数组&#xff08;串&#xff09;的相关问题。 滑动窗口的关键是找到范围和答案指标之间的单调性关系&#xff08;类似贪心&#xff09;。 滑动过程&#xff1a;滑动窗口可以用简单变量或者结构来维护…...

【RISC-V设计-06】- RISC-V处理器设计K0A之ALU

【RISC-V设计-06】- RISC-V处理器设计K0A之ALU 文章目录 【RISC-V设计-06】- RISC-V处理器设计K0A之ALU1.简介2.顶层设计3.内部结构4.端口说明5.操作码说明6.设计代码7.总结 1.简介 算术逻辑单元&#xff08;Arithmetic Logic Unit&#xff0c;简称 ALU&#xff09;是计算机中…...

MyIP:强大且简单好用!

在这个数字化的时代&#xff0c;IP地址就像是我们的网络身份证。各位在日常的工作中&#xff0c;肯定会会遇到需要和 IP 地址相关的需求。 今天和大家聊一聊一个非常好用的开源 IP 工具项目 - MyIP。 简介 MyIP一个开源IP工具箱&#xff0c;提供了一系列的网络检测工具&…...

Redis作为缓存,如何与MySql的数据进行同步?

允许延时一致的业务 概念 采用异步通知使用MQ作为中间件&#xff0c;更新数据之后通知缓存删除利用canal中间件&#xff0c;不需要修改业务代码&#xff0c;伪装成Mysql的一个从节点&#xff0c;canal通过读取binlog数据更新缓存 强一致性业务 概念 采用Redission提供的读写锁…...

Android 通知栏推送功能

Android 通知栏推送功能 Android 通知栏推送功能 让消息在用户的通知栏上显示&#xff0c;并且点击后跳转到指定的页面 MainActivity.Java import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import andro…...

【LVS】防火墙mark标记解决调度问题

实验环境是在之前部署DR模式集群的基础上做的&#xff0c;参考如下 部署DR模式集群 以http和https为例&#xff0c;当我们在webserver中同时开放80和443端口&#xff0c;那么默认控制是分开轮询的&#xff0c;就会出现了一个轮询错乱的问题&#xff1a; 当第一次访问80被轮询…...

算法笔记|Day20回溯算法II

算法笔记|Day20回溯算法II ☆☆☆☆☆leetcode 39. 组合总和题目分析代码 ☆☆☆☆☆leetcode 40.组合总和II题目分析代码 ☆☆☆☆☆leetcode 131.分割回文串题目分析代码 ☆☆☆☆☆leetcode 39. 组合总和 题目链接&#xff1a;leetcode 39. 组合总和 题目分析 本题采用回…...

Oracle认证1Z0-071线上考试注意事项

目录 一、前言二、回顾过往战绩第一次 裸考&#x1f412;第二次 背题库硬考&#xff01;&#x1f412;第三次 软件卡住&#xff0c;寄&#xff01;&#x1f648;第四次 汇总纠错&#xff0c;通过&#xff01;&#x1f31a; 三、考试流程四、考试注意事项1. 是否需要科学上网2. …...

【C++ 面试 - 基础题】每日 3 题(八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…...

影响LabVIEW工作效率的因素有哪些

影响LabVIEW工作效率的因素可以分为多个方面&#xff0c;涵盖硬件、软件、开发环境和编程习惯等。以下是一些常见的影响因素&#xff1a; 1. 硬件因素 处理器性能&#xff1a;处理器的速度和核心数量对LabVIEW程序的执行效率有很大影响。 内存大小&#xff1a;足够的内存可以保…...

linux 裸机.之SPV5210,dnw,usb,sdk,fastboot刷机(一)

linux 裸机.之SPV5210&#xff0c;dnw&#xff0c;usb&#xff0c;sdk&#xff0c;fastboot刷机&#xff08;一&#xff09;...

性能测试工具LoadRunner

前言&#x1f440;~ 上一章我们介绍了性能测试的一些基本概念&#xff0c;重要的是性能测试的各项指标&#xff0c;今天我们使用性能测试工具LoadRunner简单的完成一次性能测试 性能测试Load Runner LoadRunner是什么&#xff1f; LoadRunner安装 LoadRunner脚本录制 1.录…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...