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

【QT】 QT中的列表框-横向列表框-树状列表框-表格列表框

QT中的列表框-横向列表框-树状列表框-表格列表框

  • 1.横向列表框
    • (1)主要方法
    • (2)信号
    • (3) 示例代码1:
    • (4) 现象:
    • (5) 示例代码2:加载目录项在横向列表框显示
    • (6) 现象:
  • 2.树状列表框 QTreeWidget
    • (1)使用思路
    • (2)信号
    • (3)常用的接口函数
    • (4) 示例代码:
    • (5) 现象
  • 3.表格列表框 QTableWidget
    • (1)使用思路
    • (2)常用的接口函数
    • (3)示例代码
    • (4)现象

在UI设计器种的列表框
在这里插入图片描述

1.横向列表框

QListWidget 表示横向列表框
QListWidgetItem 表示列表项
QModelIndex 表示列表项索引

(1)主要方法

第一个:往列表框中添加列表项void QListWidget::addItem(const QString &label)  参数: label --》要添加的列表项void QListWidget::addItem(QListWidgetItem *item)参数: item --》要添加的列表项QListWidgetItem::QListWidgetItem(const QIcon &icon, const QString &text)参数: icon --》要显示的图标text --》要添加的文本内容QIcon::QIcon(const QString &fileName)参数:fileName --》根据图标的路径名构造一个QIcon对象
第二个:返回列表项中的文本内容QString QListWidgetItem::text() const
第三个:查找列表项QList<QListWidgetItem *> QListWidget::findItems(const QString &text, Qt::MatchFlags flags) const返回值:QList容器,里面存放了所有匹配的列表项参数:text --》要查找的列表项flags --》Qt::MatchContains  //搜索所有匹配的列表项
第四个:删除列表项QListWidgetItem *QListWidget::takeItem(int row)参数: row --》要删除的列表项的索引号,从0开始计算
第五个:通过列表项的文本内容得到索引号int QListWidget::row(const QListWidgetItem *item) const通过索引号得到列表项的文本内容  QListWidgetItem *QListWidget::item(int row) const

(2)信号

单击列表项
[signal] void QListWidget::itemClicked(QListWidgetItem *item)参数: item --》单击的列表项通过text()方法可以获取列表项中的内容QString QListWidgetItem::text() const
[signal] void QAbstractItemView::clicked(const QModelIndex &index)  参数: index --》单击的列表项索引通过row()方法可以获取列表项的索引
双击列表项
[signal] void QAbstractItemView::doubleclicked(const QModelIndex &index)  
[signal] void QListWidget::itemDoubleClicked(QListWidgetItem *item)

(3) 示例代码1:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QListWidgetItem>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_listWidget_itemClicked(QListWidgetItem *item);void on_listWidget_clicked(const QModelIndex &index);private:Ui::Widget *ui;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//往横向列表框中添加列表项ui->listWidget->addItem("王0");ui->listWidget->addItem("王1");ui->listWidget->addItem("王2");ui->listWidget->addItem("王3");ui->listWidget->addItem("王4");ui->listWidget->addItem("王5");ui->listWidget->addItem("王6");ui->listWidget->addItem("王7");ui->listWidget->addItem("王8");ui->listWidget->addItem("王9");//往横向列表框中添加列表项(带图标)QListWidgetItem(const QIcon &icon, const QString &text)QIcon icon1("C:/Users/xxx/Desktop/vm_shared/code/QT_proj/res/1.png");QListWidgetItem *item1=new QListWidgetItem(icon1,"王10");ui->listWidget->addItem(item1);//设置字体QFont myfont("楷体",20);ui->listWidget->setFont(myfont);//设置图标大小QSize size1(28,28);ui->listWidget->setIconSize(size1);//查找列表项QList<QListWidgetItem *> itemlist=ui->listWidget->findItems("王1",Qt::MatchContains); //查找所有的王1//QList<QListWidgetItem *> itemlist=ui->listWidget->findItems("王1",Qt::MatchStartsWith); //查找第一个符合要求的王1for(auto x:itemlist)qDebug()<<"找到了: "<<x->text();
}Widget::~Widget()
{delete ui;
}// 第一种:单击列表项
void Widget::on_listWidget_itemClicked(QListWidgetItem *item)
{
//    qDebug()<<"单击的是: "<<item->text();
//    item->setTextAlignment(Qt::AlignRight);//删除列表项
//    ui->listWidget->takeItem(ui->listWidget->row(item));
}// 第二种:单击列表项
void Widget::on_listWidget_clicked(const QModelIndex &index)
{qDebug()<<"单击的列表项索引号(行号): "<<index.row();
}

(4) 现象:

在这里插入图片描述

(5) 示例代码2:加载目录项在横向列表框显示

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QListWidgetItem>
#include <QDebug>
#include <QFileInfo>
#include <QFileDialog>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();void on_listWidget_clicked(const QModelIndex &index);private:Ui::Widget *ui;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}//单击列表项
void Widget::on_listWidget_clicked(const QModelIndex &index)
{qDebug()<<"单击的列表项索引号(行号): "<<index.row();
}//加载目录
void Widget::on_pushButton_clicked()
{// 弹出目录对话框 获取打开的目录路径QString dirpath=QFileDialog::getExistingDirectory(this);qDebug()<< "dirpath:" << dirpath;//创建目录对象QDir mydir(dirpath);//遍历目录QStringList filelist=mydir.entryList();//遍历列表项for(int i=0; i<filelist.size(); i++){if(filelist.at(i)=="." || filelist.at(i)=="..")continue;//拼接得到绝对路径QString allpath=QString("%1/%2").arg(dirpath).arg(filelist.at(i));//判断文件类型QFileInfo info(allpath);if(info.isDir()) //是目录{QIcon icon1("C:/Users/xxx/Desktop/vm_shared/code/QT_proj/res/文件夹.png");QListWidgetItem *item1=new QListWidgetItem(icon1,allpath);ui->listWidget->addItem(item1);//设置图标大小QSize size1(28,28);ui->listWidget->setIconSize(size1);}else{QIcon icon1("C:/Users/xxx/Desktop/vm_shared/code/QT_proj/res/文件.png");QListWidgetItem *item1=new QListWidgetItem(icon1,allpath);ui->listWidget->addItem(item1);//设置图标大小QSize size1(28,28);ui->listWidget->setIconSize(size1);}}//设置字体QFont myfont("楷体",24);ui->listWidget->setFont(myfont);
}

(6) 现象:

选择【加载目录】–>确定后将所选择的目录显示在横向列表框种
在这里插入图片描述

2.树状列表框 QTreeWidget

(1)使用思路

第一步:设置水平头 --》树状列表框的树根
void QTreeWidget::setHeaderLabel(const QString &label)
参数:label --》要添加的水平头
第二步:添加顶层节点
void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item)
参数:item --》要添加的顶层节点
QTreeWidgetItem(const QStringList &strings)
参数:strings --》要添加的字符串
第三步:添加子节点
void QTreeWidgetItem::addChild(QTreeWidgetItem *child)
参数:child --》要添加的子节点

(2)信号

跟横向列表框类似,请参见横向列表框信号的介绍

(3)常用的接口函数

第一个:根据列号得到对应列表项文本内容QString QTreeWidgetItem::text(int column) const
第二个:查找列表项QList<QTreeWidgetItem *> QTreeWidget::findItems(const QString &text,Qt::MatchFlags flags)参数:text --》要查找的列表项flags --》打算如何查找
第三个:删除列表项
//删除子节点
void QTreeWidgetItem::removeChild(QTreeWidgetItem *child)参数:child --》要删除的子节点
QTreeWidgetItem *QTreeWidgetItem::takeChild(int index)参数:index --》要删除的子节点索引号,从0开始
//删除顶层节点
ui->treeWidget->takeTopLevelItem(0);  //参数是顶层节点的索引参数:index --》索引号从0开始第一个顶层节点  0第二个顶层节点  1

(4) 示例代码:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTreeWidgetItem>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_treeWidget_itemClicked(QTreeWidgetItem *item, int column);private:Ui::Widget *ui;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置水平头ui->treeWidget->setHeaderLabel("QQ好友");// 设置顶层节点--》分组的标题// 写法1:传统的写法// QStringList list1;// list1.append("幼儿园同学");// 写法2:简洁的写法// QStringList list1;// list1<<"幼儿园同学"; //operator<<// 写法3:C++的匿名对象--》没有名字的对象(传递实参的时候用到匿名对象)QTreeWidgetItem *item1=new QTreeWidgetItem(QStringList()<<"幼儿园同学");ui->treeWidget->addTopLevelItem(item1);QTreeWidgetItem *item2=new QTreeWidgetItem(QStringList()<<"小学同学");ui->treeWidget->addTopLevelItem(item2);QTreeWidgetItem *item3=new QTreeWidgetItem(QStringList()<<"中学同学");ui->treeWidget->addTopLevelItem(item3);//添加子节点QTreeWidgetItem *item10=new QTreeWidgetItem(QStringList()<<"张1");QTreeWidgetItem *item11=new QTreeWidgetItem(QStringList()<<"张2");QTreeWidgetItem *item12=new QTreeWidgetItem(QStringList()<<"张3");//给子节点设置图标item10->setIcon(0,QIcon("C:/Users/xxx/Desktop/vm_shared/code/QT_proj/res/头像1.png"));item11->setIcon(0,QIcon("C:/Users/xxx/Desktop/vm_shared/code/QT_proj/res/头像2.png"));item12->setIcon(0,QIcon("C:/Users/xxx/Desktop/vm_shared/code/QT_proj/res/头像3.png"));item1->addChild(item10);item1->addChild(item11);item1->addChild(item12);
}Widget::~Widget()
{delete ui;
}void Widget::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{qDebug()<<"单击的列表项是:"<<item->text(column);//无非就两种情况:一种item是顶层节点//              二种item是个子节点//删除幼儿园同学这个顶层节点对应的子节点/*QTreeWidgetItem *QTreeWidgetItem::parent() constQTreeWidgetItem *QTreeWidgetItem::child(int index) const*/// 若无父节点的话那么当前节点就是顶层节点if(item->parent()==nullptr){//item->removeChild(item->child(2)); //把第三项删除
//        ui->treeWidget->takeTopLevelItem(0); //索引是0的顶层节点是幼儿园同学qDebug()<<"单击的是顶层节点";}else// 子节点对应的顶层节点->removeChild(子节点);qDebug()<<"单击的是顶层节点下面的某个子节点";
}

(5) 现象

在这里插入图片描述

3.表格列表框 QTableWidget

(1)使用思路

第一步:设置表格的列数void QTableWidget::setColumnCount(int columns)参数:columns --》表格的列数比如:做一个学生表格  姓名  班级  成绩 --》三个字段
第二步:设置水平头 --》每一列字段的名字void QTableWidget::setHorizontalHeaderLabels(const QStringList &labels)参数:labels --》要设置的水平内容
第三步:设置表格的行数void QTableWidget::setRowCount(int rows)参数:rows --》表格的行数
第四步:设置正文内容void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)参数:row --》行号,从0开始column --》列号,从0开始item --》要添加的正文内容QTableWidgetItem::QTableWidgetItem(const QString &text)

(2)常用的接口函数

QTableWidgetItem *QTableWidget::takeItem(int row, int column) //删除文字内容

(3)示例代码

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_tableWidget_cellClicked(int row, int column);private:Ui::Widget *ui;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置表格列数ui->tableWidget->setColumnCount(4);//设置表格的字段名(水平头)ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"年龄"<<"成绩"<<"家庭住址");//设置表格的行数ui->tableWidget->setRowCount(20);//往表格中添加正文内容ui->tableWidget->setItem(0,0,new QTableWidgetItem("张三"));ui->tableWidget->setItem(0,1,new QTableWidgetItem("21"));ui->tableWidget->setItem(0,2,new QTableWidgetItem("99.5"));ui->tableWidget->setItem(0,3,new QTableWidgetItem("广州"));ui->tableWidget->setItem(1,0,new QTableWidgetItem("李四"));ui->tableWidget->setItem(1,1,new QTableWidgetItem("19"));ui->tableWidget->setItem(1,2,new QTableWidgetItem("95.5"));ui->tableWidget->setItem(1,3,new QTableWidgetItem("深圳"));
}Widget::~Widget()
{delete ui;
}void Widget::on_tableWidget_cellClicked(int row, int column)
{qDebug()<<"单击的列表项行和列分别是: "<<row<<"  "<<column;//删除列表项ui->tableWidget->takeItem(row,column);
}

(4)现象

在这里插入图片描述

相关文章:

【QT】 QT中的列表框-横向列表框-树状列表框-表格列表框

QT中的列表框-横向列表框-树状列表框-表格列表框 1.横向列表框(1)主要方法(2)信号(3) 示例代码1:(4) 现象&#xff1a;(5) 示例代码2&#xff1a;加载目录项在横向列表框显示(6) 现象&#xff1a; 2.树状列表框 QTreeWidget(1)使用思路(2)信号(3)常用的接口函数(4) 示例代码&am…...

决策树:ID3,C4.5,CART树总结

树模型总结 决策树部分重点关注分叉的指标&#xff0c;多叉还是单叉&#xff0c;处理离散还是连续值&#xff0c;剪枝方法&#xff0c;以及回归还是分类 一、决策树 ID3(Iterative Dichotomiser 3) 、C4.5、CART决策树 ID3:确定分类规则判别指标、寻找能够最快速降低信息熵的方…...

easyexcel使用模板填充excel坑点总结

1.单层map设置值是{属性}&#xff0c;那使用两层map进行设置值&#xff0c;是不是可以使用{属性.属性}&#xff0c;以为取出map里字段只用{属性}就可以设置值&#xff0c;那再加个.就可以从里边map取出对应属性&#xff0c;没有两层map写法 填充得到的文件打开报错 was empty (…...

量子计算与经典计算融合:开启计算新时代

一、引言 随着科技的飞速发展&#xff0c;计算技术正迎来一场前所未有的变革。量子计算作为前沿技术&#xff0c;以其强大的并行计算能力和对复杂问题的高效处理能力&#xff0c;吸引了全球科技界的关注。然而&#xff0c;量子计算并非要完全取代经典计算&#xff0c;而是与经典…...

C# LINQ基础知识

简介 LINQ(Language Integrated Query)&#xff0c;语言集成查询&#xff0c;是一系列直接将查询功能集成到 C# 语言的技术统称。使用LINQ表达式可以对数据集合进行过滤、排序、分组、聚合、串联等操作。 例子&#xff1a; public class Person {public int Id;public string…...

GCoNet+:更强大的团队协作 Co-Salient 目标检测器 2023 GCoNet+(翻译)

摘要 摘要&#xff1a;本文提出了一种新颖的端到端群体协作学习网络&#xff0c;名为GCoNet&#xff0c;它能够高效&#xff08;每秒250帧&#xff09;且有效地识别自然场景中的共同显著目标。所提出的GCoNet通过基于以下两个关键准则挖掘一致性表示&#xff0c;实现了共同显著…...

QT常见输入类控件及其属性

Line Edit QLineEdit用来表示单行输入框&#xff0c;可以输入一段文本&#xff0c;但是不能换行 核心属性&#xff1a; 核心信号 信号 说明 void cursorPositionChanged(int old,int new) 当鼠标移动时发出此型号&#xff0c;old为先前位置&#xff0c;new为新位置 void …...

Few-shot medical image segmentation with high-fidelity prototypes 论文总结

题目&#xff1a;Few-shot medical image segmentation with high-fidelity prototypes&#xff08;高精确原型&#xff09; 论文&#xff1a;Few-shot medical image segmentation with high-fidelity prototypes - ScienceDirect 源码&#xff1a;https://github.com/tntek/D…...

DBA工作常见问题整理

MVCC机制: PostgreSQL的多版本并发控制(MVCC)是其核心特性之一&#xff0c;它允许数据库在高并发环境下保持高性能的同时提供事务隔离。 MVCC通过维护数据的多个版本实现&#xff1a; 读操作不阻塞写操作写操作不阻塞读操作避免使用锁实现并发控制 PostgreSQL的MVCC特点 写时…...

深入理解Java包装类:自动装箱拆箱与缓存池机制

深入理解Java包装类&#xff1a;自动装箱拆箱与缓存池机制 对象包装器 Java中的数据类型可以分为两类&#xff1a;基本类型和引用类型。作为一门面向对象编程语言&#xff0c; 一切皆对象是Java语言的设计理念之一。但基本类型不是对象&#xff0c;无法直接参与面向对象操作&…...

如何使用Node-RED采集西门子PLC数据通过MQTT协议实现数据交互并WEB组态显示

需求概述 本章节主要实现一个流程&#xff1a;使用纵横智控的EG网关通过Node-red&#xff08;可视化编程&#xff09;采集PLC数据&#xff0c;并通过MQTT协议和VISION&#xff08;WEB组态&#xff09;实现数据交互。 以采集西门子PLC为例&#xff0c;要采集的PLC的IP、端口和点…...

【cocos creator 3.x】速通3d模型导入, 模型创建,阴影,材质使用,模型贴图绑定

1、右键创建平面&#xff0c;立方体 2、点击场景根节点&#xff0c;shadows勾选enabled3、点击灯光&#xff0c;shadow enabled勾选 4、点击模型&#xff0c;勾选接收阴影&#xff0c;投射阴影&#xff08;按照需要勾选&#xff09; 5、材质创建 6、选中节点&#xff0c;找…...

批量创建OpenStack实例

在Linux终端实现批量创建OpenStack实例&#xff0c;支持支持统计、并发创建、安全确认、重试机制、日志。 #!/bin/bash # # 增强版OpenStack实例创建脚本&#xff08;修复日志功能&#xff09; # 功能&#xff1a;支持统计、并发创建、安全确认、重试机制 # 更新日期&#xf…...

常用的 ​​SQL 语句分类整理​​

以下是常用的 ​​SQL 语句分类整理​​&#xff0c;覆盖数据查询、操作、表管理和高级功能&#xff0c;适用于大多数关系型数据库&#xff08;如 MySQL、PostgreSQL、SQL Server&#xff09;&#xff1a; 目录 ​​一、数据查询&#xff08;DQL&#xff09;​​ ​​1. 基础查…...

驱动开发硬核特训 · Day 15:电源管理核心知识与实战解析

在嵌入式系统中&#xff0c;电源管理&#xff08;Power Management&#xff09;并不是“可选项”&#xff0c;而是实际部署中影响系统稳定性、功耗、安全性的重要一环。今天我们将以 Linux 电源管理框架 为基础&#xff0c;从理论结构、内核架构&#xff0c;再到典型驱动实战&a…...

【零基础】基于DeepSeek-R1与Qwen2.5Max的行业洞察自动化平台

自动生成行业报告,通过调用两个不同的大模型(DeepSeek 和 Qwen),完成从行业趋势分析到结构化报告生成的全过程。 完整代码:https://mp.weixin.qq.com/s/6pHi_aIDBcJKw1U61n1uUg 🧠 1. 整体目的与功能 该脚本实现了一个名为 ReportGenerator 的类,用于: 调用 DeepSe…...

Web前端 (CSS篇)

什么是CSS&#xff1f; css(Cascading Style Sheets)是层叠样式表或级联样式表&#xff0c;是一组设置规则&#xff0c;用于控制web页面外观。 为什么使用CSS? CSS 用于定义网页的样式&#xff0c;包括针对不同设备和屏幕尺寸的设计和布局。 CSS 实例 body {background-col…...

C 语言联合与枚举:自定义类型的核心解析

目录 1.联合体 1.1联合体的声明与创建 1.2联合体在内存中的存储 1.3相同成员的结构体与内存比较 1.4联合体内存空间大小的计算 1.5联合体的应用 2.枚举类型 2.1枚举变量的声明 2.2枚举变量的优点 2.3枚举的使用 上篇博客中&#xff0c;我们通过学习了解了C语言中一种自…...

基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南

前期知识背景 binlog 什么是binlog 它记录了所有的DDL和DML(除 了数据查询语句)语句&#xff0c;以事件形式记录&#xff0c;还包含语句所执行的消耗的时间&#xff0c;MySQL 的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗。 binlog分类 MySQL Bi…...

MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境

文章目录 一、服务器选型——给数据库一个舒适的家二、系统调优——打造高性能跑道三、MySQL配置——让数据库火力全开四、监控体系——数据库的体检中心五、备份恢复——数据安全的最后防线六、主从复制——数据同步的艺术七、安全加固——守护数据长城 引言&#xff1a;从小白…...

golang context源码

解析 context结构 Deadline&#xff1a;返回 context 的过期时间&#xff1b; Done&#xff1a;返回 context 中的 channel&#xff1b; Err&#xff1a;返回错误&#xff1b; Value&#xff1a;返回 context 中的对应 key 的值. type Context interface {Deadline() (deadl…...

【MySQL】MySQL的基础语法及其语句的介绍

1、基础语法 mysql -h【主机名】 -u【用户名】 -p //登录MySQL exit或quit; //退出MySQL show database; //查看MySQL下的所有数据库 use 【数据库名】; //进入数据库 show tables; //查看数据库下的所有表名 *MySQL的启动和关闭 &am…...

大模型应用开发自学笔记

理论学习地址&#xff1a; https://zh.d2l.ai/chapter_linear-networks/index.html autodl学术加速&#xff1a; source /etc/network_turboconda常见操作: 删除&#xff1a; conda remove --name myenv --all -y导出&#xff1a; conda env export > environment.yml…...

Spring能够有效地解决单例Bean之间的循环依赖问题

在Spring框架中&#xff0c;earlySingletonObjects和singletonObjects是两个与Bean实例化过程密切相关的概念&#xff0c;它们都存储在DefaultSingletonBeanRegistry类中。这两个概念主要用于Spring的依赖注入机制&#xff0c;特别是针对单例Bean的创建过程。 singletonObject…...

【计算机视觉】三维视觉项目 - Colmap二维图像重建三维场景

COLMAP 3D重建 项目概述项目功能项目运行方式1. 环境准备2. 编译 COLMAP3. 数据准备4. 运行 COLMAP 常见问题及解决方法1. **编译问题**2. **运行问题**3. **数据问题** 项目实战建议项目参考文献 项目概述 COLMAP 是一个开源的三维重建软件&#xff0c;专注于 Structure-from…...

Linux 离线部署 Docker 18.06.3 终极指南(附一键安装卸载脚本)

Linux 离线部署 Docker 18.06.3 终极指南&#xff08;附一键安装/卸载脚本&#xff09; 摘要&#xff1a;本文针对无外网环境的 Linux 服务器&#xff0c;提供基于二进制包的 Docker 18.06.3 离线安装全流程指南。包含自动化脚本设计、服务配置优化及安全卸载方案&#xff0c;…...

ALSA架构学习2(驱动MAX98357A)

1 前言和环境 之前其实写过两篇&#xff0c;一篇是讲ALSA&#xff0c;一篇是I2S。 ALSA架构学习1&#xff08;框架&#xff09;_alsa框架学习-CSDN博客 总线学习5--I2S_max98357接喇叭教程-CSDN博客 在ALSA那篇的结尾&#xff0c;也提了几个小练习。比如&#xff1a; ### 4…...

数据结构*集合框架顺序表-ArrayList

集合框架 常见的集合框架 什么是顺序表 顺序表是一种线性表数据结构&#xff0c;它借助一组连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。 在数组上完成数据的增删查改。 自定义简易版的顺序表 代码展示&#xff1a; public interface IArray…...

VMware Workstation 保姆级 Linux(CentOS) 创建教程(附 iso)

文章目录 一、下载二、创建 一、下载 CentOS-7.9-x86_64-DVD-2009.iso 二、创建 VMware Workstation 保姆级安装教程(附安装包) VMware Workstation 保姆级安装教程(附安装包) VMware Workstation 保姆级安装教程(附安装包)...

51、项⽬中的权限管理怎么实现的

答&#xff1a;权限管理有三个很重要的模块&#xff1b; (1)⽤⼾模块&#xff1a;可以给⽤⼾分配不同的⻆⾊ (2)⻆⾊模块&#xff1a;可以授于⽤⼾不同的⻆⾊&#xff0c;不同的⻆⾊有不同权限 (3)权限模块&#xff1a;⽤于管理系统中的权限接⼝&#xff0c;为⻆⾊提供对…...