QTableWidget 接口详情
Qt Widgets->C++ Classes->QTableWidget
Qt 5.12版本QTableWidget接口详情(机翻)
QTableWidget类提供了一个带有默认模型的基于项的表视图。
属性
列数columnCount : int
行数rowCount : int
细节描述
QTableWidget类提供了一个带有默认模型的基于项的表视图。
表小部件为应用程序提供标准的表显示工具。 QTableWidget中的项由QTableWidgetItem提供。
如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。
可以使用所需的行数和列数构造表小部件:
tableWidget = new QTableWidget(12, 3, this);
或者,可以在没有给定大小的情况下构造表,并在以后调整大小:
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount(5);
在表外部创建项(没有父部件),并使用setItem()将项插入到表中:
QTableWidgetItem newItem = new QTableWidgetItem(tr(“%1”).arg(
(row+1)(column+1)));
tableWidget->setItem(row, column, newItem);
如果希望在表小部件中启用排序,请在用项目填充后启用排序,否则排序可能会干扰插入顺序(有关详细信息,请参见setItem()))。
表可以被赋予水平和垂直标题。 创建表头的最简单方法是向setHorizontalHeaderLabels()和setVerticalHeaderLabels()函数提供一个字符串列表。 这将为表的列和行提供简单的文本标题。 可以从通常在表外部构造的现有表项创建更复杂的头。例如,我们可以构造一个带有图标和对齐文本的表项,并将其用作特定列的标题:
QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr(“Cubes”));
cubesHeaderItem->setIcon(QIcon(QPixmap(“:/Images/cubed.png”)));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);
可以使用rowCount()找到表中的行数,使用columnCount()找到列数。可以使用clear()函数清除表。
See also QTableWidgetItem, QTableView, and Model/View Programming.
属性文档
列数columnCount : int
此属性保存表中的列数
默认情况下,对于没有行和列计数构造的表,此属性的值为0。
访问函数:
int columnCount() const
void setColumnCount(int columns)
行数rowCount : int
此属性保存表中的行数
默认情况下,对于没有行和列计数构造的表,此属性的值为0。
访问函数:
int rowCount() const
void setRowCount(int rows)
成员函数文档
QTableWidget::QTableWidget(QWidget *parent = nullptr)
创建具有给定父类的新表视图。
QTableWidget::QTableWidget(int rows, int columns, QWidget *parent = nullptr)
使用给定的行和列以及给定的父表创建一个新的表视图。
[virtual] QTableWidget::~QTableWidget()
销毁这个QTableWidget。
[signal] void QTableWidget::cellActivated(int row, int column)
当按行和列指定的单元格被激活时,发出此信号
[signal] void QTableWidget::cellChanged(int row, int column)
每当由行和列指定的单元格中的项的数据发生变化时,就会发出此信号。
[signal] void QTableWidget::cellClicked(int row, int column)
每当单击表中的单元格时,就会发出此信号。指定的行和列是单击的单元格。
[signal] void QTableWidget::cellDoubleClicked(int row, int column)
每当双击表中的单元格时,就会发出此信号。指定的行和列是双击的单元格。
[signal] void QTableWidget::cellEntered(int row, int column)
该信号在鼠标光标进入单元格时发出。单元格由行和列指定。
该信号仅在打开mouseTracking或在移动到一个项目时按下鼠标按钮时发出。
[signal] void QTableWidget::cellPressed(int row, int column)
每当表中的单元格被按下时,就会发出这个信号。指定的行和列是按下的单元格。
QWidget *QTableWidget::cellWidget(int row, int column) const
返回在给定行和列的单元格中显示的小部件。
注意:表拥有小部件的所有权。
See also setCellWidget().
[slot] void QTableWidget::clear()
删除视图中的所有项。这也将删除所有的选择和标题。如果不想删除标题,请使用QTableWidget::clearContents()。表的尺寸保持不变。
[slot] void QTableWidget::clearContents()
从视图中删除标题之外的所有项。这也将删除所有选择。表的尺寸保持不变。
void QTableWidget::closePersistentEditor(QTableWidgetItem *item)
关闭item的持久编辑器。
See also openPersistentEditor() and isPersistentEditorOpen().
int QTableWidget::column(const QTableWidgetItem *item) const
返回该项的列
int QTableWidget::columnCount() const
返回表格列数。
注意:属性columnCount的获取函数。 See also setColumnCount().
[signal] void QTableWidget::currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
只要当前单元格发生变化,就会发出这个信号。由previousRow和previousColumn指定的单元格是以前具有焦点的单元格,由currentRow和currentColumn指定的单元格是新的当前单元格。
int QTableWidget::currentColumn() const
返回当前项的列。
See also currentRow() and setCurrentCell().
QTableWidgetItem *QTableWidget::currentItem() const
返回当前项。
See also setCurrentItem().
[signal] void QTableWidget::currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
只要当前项发生变化,就会发出这个信号。previous项是先前具有焦点的项,current是新的当前项。
int QTableWidget::currentRow() const
返回当前项的行。
See also currentColumn() and setCurrentCell().
[override virtual protected] void QTableWidget::dropEvent(QDropEvent *event)
从QAbstractItemView::dropEvent()重新实现。
[virtual protected] bool QTableWidget::dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action)
处理由拖放操作提供的数据,该操作以给定行和列中的给定操作结束。 如果数据和动作可以被模型处理,则返回true;否则返回false。
See also supportedDropActions().
void QTableWidget::editItem(QTableWidgetItem *item)
如果项目可编辑,则开始编辑该项目。
[override virtual protected] bool QTableWidget::event(QEvent *e)
从QAbstractItemView::event()重新实现。
QList<QTableWidgetItem *> QTableWidget::findItems(const QString &text, Qt::MatchFlags flags) const
使用给定标志查找与文本匹配的项。
QTableWidgetItem *QTableWidget::horizontalHeaderItem(int column) const
返回column所在的水平表头项;不存在则返回nullptr。
See also setHorizontalHeaderItem().
[protected] QModelIndex QTableWidget::indexFromItem(const QTableWidgetItem *item) const
返回与给定项关联的QModelIndex。
注意: 这个函数接受一个非const项
[slot] void QTableWidget::insertColumn(int column)
在column列处的表中插入空列。
[slot] void QTableWidget::insertRow(int row)
表的row行后插入一空行。
bool QTableWidget::isPersistentEditorOpen(QTableWidgetItem *item) const
回持久编辑器是否为item打开。
See also openPersistentEditor() and closePersistentEditor().
QTableWidgetItem *QTableWidget::item(int row, int column) const
如果已存在,则返回给定行和列的项;否则返回nullptr。
See also setItem().
[signal] void QTableWidget::itemActivated(QTableWidgetItem *item)
当指定的item项被激活时,会发出这个信号
QTableWidgetItem *QTableWidget::itemAt(const QPoint &point) const
返回一个指向给定点上的项的指针,如果点没有被表小部件中的项覆盖,则返回nullptr。
See also item().
QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const
返回与表小部件坐标系中的QPoint(ax, ay)位置相等的项,或者如果指定的点未被表小部件中的项覆盖,则返回nullptr。See also item().
[signal] void QTableWidget::itemChanged(QTableWidgetItem *item)
每当item的数据发生变化时,就会发出这个信号。
[signal] void QTableWidget::itemClicked(QTableWidgetItem *item)
每当单击表中的项时,就会发出此信号。指定的项是单击的项。
[signal] void QTableWidget::itemDoubleClicked(QTableWidgetItem *item)
每当双击表中的一个项时,就会发出这个信号。指定的项是双击的项。
[signal] void QTableWidget::itemEntered(QTableWidgetItem *item)
当鼠标光标进入一个项目时发出这个信号。项目就是输入的项目。
该信号仅在打开mouseTracking或在移动到一个项目时按下鼠标按钮时发出。
[protected] QTableWidgetItem *QTableWidget::itemFromIndex(const QModelIndex &index) const
返回一个指向与给定索引关联的QTableWidgetItem的指针。
[signal] void QTableWidget::itemPressed(QTableWidgetItem *item)
只要按下表中的一个项,就会发出这个信号。指定的项是按下的项。
const QTableWidgetItem *QTableWidget::itemPrototype() const
返回表使用的项原型。
See also setItemPrototype().
[signal] void QTableWidget::itemSelectionChanged()
每当选择发生变化时,就会发出该信号。
See also selectedItems() and QTableWidgetItem::isSelected().
[protected] QList<QTableWidgetItem *> QTableWidget::items(const QMimeData *data) const
返回指向数据对象中包含的项的指针列表。如果对象不是由同一个进程中的QTreeWidget创建的,则列表为空。
[virtual protected] QMimeData *QTableWidget::mimeData(const QList<QTableWidgetItem *> items) const
返回一个对象,该对象包含指定项的序列化描述。用于描述项的格式是从mimeTypes()函数获得的。如果项列表为空,则返回0,而不是序列化的空列表。
[virtual protected] QStringList QTableWidget::mimeTypes() const
返回可用于描述tablewidget项列表的MIME类型列表。
See also mimeData().
void QTableWidget::openPersistentEditor(QTableWidgetItem *item)
打开给定项的编辑器。编辑器在编辑后保持打开状态
See also closePersistentEditor() and isPersistentEditorOpen().
void QTableWidget::removeCellWidget(int row, int column)
删除按行和列指示的单元格上的小部件集。
[slot] void QTableWidget::removeColumn(int column)
从表中删除列column及其所有项。
[slot] void QTableWidget::removeRow(int row)
从表中删除行row及其所有项。
int QTableWidget::row(const QTableWidgetItem *item) const
返回该项的行。
int QTableWidget::rowCount() const
返回行数。
注意: rowCount属性的获取函数。
See also setRowCount().
[slot] void QTableWidget::scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)
必要时滚动视图以确保项目可见。hint参数更精确地指定操作后项应该位于的位置。
QList<QTableWidgetItem *> QTableWidget::selectedItems() const
返回所有选定项的列表。
这个函数返回一个指向所选单元格内容的指针列表。使用selectedinindexes()函数检索完整的选择,包括空单元格。See also selectedIndexes().
QList QTableWidget::selectedRanges() const
返回所有选定范围的列表。
See also QTableWidgetSelectionRange.
void QTableWidget::setCellWidget(int row, int column, QWidget *widget)
将给定小部件设置为显示在给定行和列的单元格中,将小部件的所有权传递给表。
如果单元格小部件A被单元格小部件B替换,则单元格小部件A将被删除。例如,在下面的代码片段中,QLineEdit对象将被删除。
setCellWidget(row, column, new QLineEdit);
…
setCellWidget(row, column, new QTextEdit);
See also cellWidget().
void QTableWidget::setColumnCount(int columns)
将此表模型中的列数设置为列。如果该值小于columnCount(),则丢弃不需要的列中的数据。
注意: columnCount属性的设置函数。
See also columnCount() and setRowCount().
void QTableWidget::setCurrentCell(int row, int column)
将当前单元格设置为位置(row、column)上的单元格。
根据当前的选择模式,单元格也可能被选中。
See also setCurrentItem(), currentRow(), and currentColumn().
void QTableWidget::setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command)
使用给定命令将当前单元格设置为位置(row、column)处的单元格。
See also setCurrentItem(), currentRow(), and currentColumn().
void QTableWidget::setCurrentItem(QTableWidgetItem *item)
将当前项设置为item。
除非选择模式为NoSelection,否则项目也会被选中。
See also currentItem() and setCurrentCell().
void QTableWidget::setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command)
使用给定的命令将当前项设置为item。
See also currentItem() and setCurrentCell().
void QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem *item)
设置列的水平表头项。如有必要,将增加列数以适应该项。如果有之前存在,则删除前一个表头项。
See also horizontalHeaderItem().
void QTableWidget::setHorizontalHeaderLabels(const QStringList &labels)
使用labels设置水平表头。
void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)
将给定行和列的项设置为item。
表获得项的所有权。
注意,如果启用了排序(see sortingEnabled)并且column是当前排序列,则该行将被移动到由item确定的排序位置。
如果你想设置特定行的几个项(比如,通过在循环中调用setItem()),你可能想在这样做之前关闭排序,然后再打开它;这将允许您对同一行中的所有项使用相同的row参数(即setItem()不会移动该行)。
See also item() and takeItem().
void QTableWidget::setItemPrototype(const QTableWidgetItem *item)
将表的项属性设置为指定的item。
当表小部件需要创建一个新的表项时,它将使用项属性克隆函数。 例如,当用户在空单元格中进行编辑时。当你有一个QTableWidgetItem子类并且想要确保QTableWidget创建你的子类的实例时,这是很有用的。
表格拥有原型的所有权。
See also itemPrototype().
void QTableWidget::setRangeSelected(const QTableWidgetSelectionRange &range, bool select)
range根据select选择或取消选择。
void QTableWidget::setRowCount(int rows)
将此表模型中的行数设置为行。如果该值小于rowCount(),则丢弃不需要的行中的数据。
注意: rowCount属性的设置函数。
See also rowCount() and setColumnCount().
void QTableWidget::setVerticalHeaderItem(int row, QTableWidgetItem *item)
将row行的垂直标题项设置为item。
See also verticalHeaderItem().
void QTableWidget::setVerticalHeaderLabels(const QStringList &labels)
使用标签设置垂直表头标签。
void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder)
根据列和顺序对表小部件中的所有行进行排序。
[virtual protected] Qt::DropActions QTableWidget::supportedDropActions() const
返回此视图支持的拖放操作。
See also Qt::DropActions.
QTableWidgetItem *QTableWidget::takeHorizontalHeaderItem(int column)
移除垂直表头column列处标题项,但不删除它。
QTableWidgetItem *QTableWidget::takeItem(int row, int column)
移除row 行,column 列的项,但不删除它。
QTableWidgetItem *QTableWidget::takeVerticalHeaderItem(int row)
移除垂直表头row行处标题项,但不删除它。
QTableWidgetItem *QTableWidget::verticalHeaderItem(int row) const
返回row行的垂直标题项。
See also setVerticalHeaderItem().
int QTableWidget::visualColumn(int logicalColumn) const
返回给定logicalColumn的可视列号。
QRect QTableWidget::visualItemRect(const QTableWidgetItem *item) const
返回item处的项所占用的视窗上的矩形。
int QTableWidget::visualRow(int logicalRow) const
返回给定logicalRow的可视行号。
相关文章:
QTableWidget 接口详情
Qt Widgets->C Classes->QTableWidget Qt 5.12版本QTableWidget接口详情(机翻) QTableWidget类提供了一个带有默认模型的基于项的表视图。 属性 列数columnCount : int 行数rowCount : int 细节描述 QTableWidget类提供了一个带有默认模型的基…...
GESP CCF python四级编程等级考试认证真题 2024年9月
一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成…...
oracle数据库名实例名服务名
Oracle数据库是一个复杂的系统,它包含多个组件,包括数据库服务器、实例和服务。 数据库名(DB_NAME):这是数据库的内部名称,通常在创建数据库时指定,并在整个数据库生命周期内保持不变。 实例名…...

python+appium+雷电模拟器安卓自动化及踩坑
一、环境安装 环境:window11 1.1 安装Android SDK AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 这里面任选一个就可以,最终下载完主要要安装操作安卓的工具adb,安装这个步骤的前提是要…...

Python第七八次作业
1.输入一个大于0的正整数n,如果n 1 ,则返回1, 如果n是偶数,则返回 n // 2 ,如果n是奇数,则返回 3n 1,将所有的返回值存放到一个列表中,注意:n是第一个元素,其他的元素根…...

Leetcode——数组:螺旋矩阵59.螺旋矩阵
题目 思路 对于每层,从左上方开始以顺时针的顺序填入所有元素。假设当前层的左上角位于 (top,left),右下角位于 (bottom,right),按照如下顺序填入当前层的元素。 从左到右填入上侧元素,依次为 (top,left) 到 (top,right)。 从上到…...

C++类与对象-继承和多态(超全整理)
前言 前面讲类与对象上中下时,所讲的都是在单个类中相关的语法(初始化列表、this指针、静态成员、常函数和常对象......)或者使两个不同的类产生联系的语法(友元)。而本文虽然也是类与对象的内容,但和之前的…...

3.3 Thymeleaf语法
文章目录 引言Thymeleaf标签显示标签链接地址标签条件判断标签元素遍历标签 Thymeleaf表达式变量表达式选择变量表达式消息表达式链接表达式 Thymeleaf内置对象上下文对象上下文变量上下文区域请求对象响应对象会话对象日期对象 实战演练创建控制器创建模板页面 结语 引言 Thy…...

使用Dlib库实现人脸检测和关键点定位
目录 前言 一、安装Dlib库 二、人脸检测 三、人脸关键点定位 前言 Dlib是一个现代化的 C 工具包,提供了一些机器学习算法和工具,特别是在面部识别和人脸关键点检测方面非常流行。它具有易于使用的 Python 接口,并被广泛应用于计算机视觉项…...

DNS隧道流量分析
DNS隧道 DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量…...
HCIP-HarmonyOS Application Developer 习题(十一)
(填空)1、某开发者在使用HarmonyOs的分布式力时,分布式_____能力是其他分布式能力的基础。 答案:软总线 分析:分布式软总线是手机、平板、智能穿戴、智慧屏、车机等分布式设备的通信基座,为设备之间的互联互…...
使用Ollama测试OpenAI的Swarm多智能体编排框架
Ollama https://ollama.com/ ollama run qwen2.5Install Requires Python 3.10 pip install githttps://github.com/openai/swarm.git代码V1 # 导入Swarm和Agent类 from swarm import Swarm, Agent from openai import OpenAI # 实例化Swarm客户端 openai_client OpenAI…...

C# 完美操作 Active Directory 详细总结,轻松玩转域管理
前言 嗨,大家好! 在这个数据信息飞速发展的 21 世纪,数据安全成为了每个企业关注的焦点,保护企业数据安全日益成为企业工作中的重中之重。 域服务器,尤其是微软的 Active Directory(AD)&…...

PCL 点云配准 KD-ICP算法(精配准)
目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云函数 2.1.2 构建KD树函数 2.1.3 KD-ICP配准函数 2.1.4 点云可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法…...

uniapp打包安卓apk步骤
然后安装在手机上就可以啦...

Springboot 整合 Java DL4J 实现安防监控系统
🧑 博主简介:历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,…...

【数据结构与算法】第1课—算法复杂度
文章目录 1. 数据结构2. 算法3. 算法效率4. 算法复杂度5. 算法时间复杂度5.1 大O的渐进表示法5.2 时间复杂度示例 6. 空间复杂度6.1 练习16.2 练习26.3 练习3 1. 数据结构 数据结构是计算机存储、组织数据的方式,指相互之间存在一种和多种特定关系的数据元素的集合&…...
利用高德API获取整个城市的公交路线并可视化(五)
如果说我比别人看得更远些,那是因为我站在了巨人的肩上。——牛顿 参考:使用高德API获取公交线路数据,无需代码_实时公交api-CSDN博客 记录于2024年10月,因数据获取受网站更新策略等影响可能会失效,故记录写作时间,同时拾人牙慧,优化了后半部分数据直接导出为csv和shp…...
DNS:互联网域名系统的核心
什么是 DNS? DNS(Domain Name System,域名系统)是互联网的一项基础服务,它负责将人类容易记忆的域名(如 www.example.com)转换成计算机可以识别的 IP 地址(如 192.0.2.1)…...

小猿口算炸鱼脚本
目录 写在前面: 一、关于小猿口算: 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享: 补充:软件包下载 写在前面: 最近小猿口算已经被不少大学生攻占,小学生直呼有挂。原本是以为大学生都打着本…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...