表格控件QTableWidget

news2024/12/27 16:15:54

下面说一下表格的常用方法

行列数目、行表头、列表头

行表头:就是表格控件的第一行,用于设置每一列的标题

列表头:就是表格控件的第一列,用于设置每一行的标题,通常缺省则默认显示行号

设置和获取行列的数目

添加n行或者n列数据之前,需要先把行设置为n或者列设置为n,开辟好空间,才能往表格里面填充数据

// 获取/设置行的数目
int rowCount() const
void setRowCount(int rows)
  
// 获取/设置列的数目    
int columnCount() const
void setColumnCount(int columns)

插入行列

在插入一行或一列数据之前,我们要先插入一行空行或者空列来开辟空间,然后再填充数据

//在指定行号或者列号处插入一行空行或者空列
void QTableWidget::insertRow(int row)
void QTableWidget::insertColumn(int column)

删除行或列

//删除指定行或列的数据
void QTableWidget::removeRow(int row)
void QTableWidget::removeColumn(int column)

获取当前行或列(项)

获取选中行或列(项)

和当前行或列(项)有区别,只有选中了表格中的某些数据,才能获取到选中行或列(项)

//获取选中的单元格,返回1个列表,可以有多个
QList<QTableWidgetItem *> QTableWidget::selectedItems() const

//获取选中的范围,QTableWidgetSelectionRange类提供方法可以获取到选中的行数,列数,开始行,结束行,开始列,结束列
QList<QTableWidgetSelectionRange> QTableWidget::selectedRanges() const

获取和设置每一个单元格项

//根据行号和列号来设置该单元格的item
void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)

//根据行号和列号来获取该单元格的item
QTableWidgetItem *QTableWidget::item(int row, int column) const

设置和获取行表头和列表头

// 设置行表头,参数是一个string list,可一次性设置多个列的列名
void setHorizontalHeaderLabels(const QStringList &labels)
// 获取行表头
QHeaderView *horizontalHeader() const


// 设置列表头 - 通常不设置,则默认为行号
void setVerticalHeaderLabels(const QStringList &labels)
// 获取列表头
QHeaderView *verticalHeader() const

设置列宽

// 设置列的宽度 ,QHeaderView类的方法   
void QHeaderView::setSectionResizeMode(QHeaderView::ResizeMode mode)

ResizeMode是枚举,有4种取值

  • QHeaderView::Interactive:用户可拖动改变列宽
  • QHeaderView::Fixed:固定列宽
  • QHeaderView::Stretch:拉伸自适应列宽大小
  • QHeaderView::ResizeToContents:根据内容设置列宽

通常,我们将整体先设置为QHeaderView::Stretch,然后根据需要对单独的列设置


// 1、先整体设置为自适应宽度,再单独设置某一列的宽度规则
ui->twStudent->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 

// 2、然后,单独设置第一列根据内容调整宽度,
// ui->twStudent->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);


//或者单独设置第一列为固定宽度
ui->twStudent->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
ui->twStudent->setColumnWidth(0, 80);

单元格

每个网格单元称为1个单元格。每个单元格都有1个行号和列号

QTableWidget控件中,每一个单元格都是1个QTableWidgetItem对象,可以设置其文字内容等

获取和设置单元格

// 获取和设置指定行列位置的单元格
QTableWidgetItem *item(int row, int column) const;
void setItem(int row, int column, QTableWidgetItem *item)

// 构造 QTableWidgetItem
QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type)
QTableWidgetItem(const QString &text, int type = Type)

单元格对齐方式

是QTableWidgetItem类的方法

// 获取和设置单元格文本的对齐方式,是QTableWidgetItem类的方法
int textAlignment() const
void setTextAlignment(int alignment)

alignment取值

  • Qt::AlignLeft 水平方向-左对齐
  • Qt::AlignRight 水平方向-右对齐
  • Qt::AlignHCenter 水平方向-居中对齐
  • Qt::AlignTop 垂直方向-上对齐
  • Qt::AlignBottom 垂直方向-下对齐
  • Qt::AlignVCenter 垂直方向-居中对齐
  • Qt::AlignCenter(AlignVCenter | AlignHCenter) 垂直方向和水平方向-居中对齐

单元格是否可编辑

// 获取和设置单元格是否可编辑
QAbstractItemView::EditTriggers editTriggers() const
void setEditTriggers(QAbstractItemView::EditTriggers triggers)

triggers取值

  • AbstractItemView::NoEditTriggers 不可编辑
  • QAbstractItemView::CurrentChanged 当切换单元格时
  • QAbstractItemView::DoubleClicked 当双击单元格时
  • QAbstractItemView::SelectedClicked 当单击一个已选中的单元格时
  • QAbstractItemView::EditKeyPressed 当一个单元格获取焦点,按编辑按键时(F2)
  • QAbstractItemView::AnyKeyPressed 当一个单元格获取焦点,按任意键时
  • QAbstractItemView::AllEditTriggers 以上所有条件的组合。(31 = 1|2|4|8|16)

隔行交替背景色

即奇数行和偶数行的背景色不同,便于用户浏览

// 获取和设置是否允许隔行交替背景色(该接口Win11失效)
bool alternatingRowColors() const
void setAlternatingRowColors(bool enable)

选择行为

单击一个单元格时,是选中该单元格,还是选中一整行,或是一整列

// 获取和设置选择行为
QAbstractItemView::SelectionBehavior selectionBehavior() const
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)

 behavior有3种取值

  • QAbstractItemView::SelectItems 选中单元格
  • QAbstractItemView::SelectRows 选中单元格所在行
  • QAbstractItemView::SelectColumns 选中单元格所在列

选择模式

即表格控件只能选择单行,或者可以ctrl键或shift键一次性选择多行

// 获取和设置选择模式
QAbstractItemView::SelectionMode selectionMode() const
void setSelectionMode(QAbstractItemView::SelectionMode mode)

mode有5种取值

  • QAbstractItemView::NoSelection 不可选择
  • QAbstractItemView::SingleSelection 单行选择,一次只允许选择一行
  • QAbstractItemView::MultiSelection 多行选择,鼠标单击就可以选择多行
  • QAbstractItemView::ExtendedSelection 扩展选择,按shift键选中一个范围内的行,ctrl键可以选中不相邻的行
  • QAbstractItemView::ContiguousSelection 相邻选择,按shift键或ctrl键都可以选中一个范围内的行

常用信号

//单元格被点击
[signal] void QTableWidget::itemClicked(QTableWidgetItem *item)

举例

显示当前行

 尾部添加一行

选中行前面插入一行

删除选中行

修改选中行

外观设置

选择模式设置

代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QTableWidget>
#include<QHeaderView>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QGridLayout>
#include<QGroupBox>
#include<QLineEdit>
#include<QPushButton>
#include<QLabel>
#include<QCheckBox>
#include<QRadioButton>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr): QWidget(parent)
    {
        resize(800,500);

        QHBoxLayout* main_layout=new QHBoxLayout(this);

        /*************************初始化表格控件*******************************/
        //创建表格,并初始化数据
        table=new QTableWidget(this);
        //设置为4列
        table->setColumnCount(4);
        //设置列宽自适应
        table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
        //添加行表头
        table->setHorizontalHeaderLabels({"姓名","性别","年龄","籍贯"});
        //初始化2行数据
        //要先设置行数,来开辟空间
        table->setRowCount(2);
        //要先构造出列表项
        QTableWidgetItem* name1=new QTableWidgetItem("李雷");
        QTableWidgetItem* gender1=new QTableWidgetItem("男");
        QTableWidgetItem* age1=new QTableWidgetItem("12");
        QTableWidgetItem* province1=new QTableWidgetItem("广东");
        //设置居中对齐
        name1->setTextAlignment(Qt::AlignCenter);
        gender1->setTextAlignment(Qt::AlignCenter);
        age1->setTextAlignment(Qt::AlignCenter);
        province1->setTextAlignment(Qt::AlignCenter);
        //然后填充单元格数据
        table->setItem(0,0,name1);
        table->setItem(0,1,gender1);
        table->setItem(0,2,age1);
        table->setItem(0,3,province1);
         /********************************************************/

        QTableWidgetItem* name2=new QTableWidgetItem("韩梅梅");
        QTableWidgetItem* gender2=new QTableWidgetItem("女");
        QTableWidgetItem* age2=new QTableWidgetItem("11");
        QTableWidgetItem* province2=new QTableWidgetItem("北京");
        name2->setTextAlignment(Qt::AlignCenter);
        gender2->setTextAlignment(Qt::AlignCenter);
        age2->setTextAlignment(Qt::AlignCenter);
        province2->setTextAlignment(Qt::AlignCenter);
        table->setItem(1,0,name2);
        table->setItem(1,1,gender2);
        table->setItem(1,2,age2);
        table->setItem(1,3,province2);
        main_layout->addWidget(table);

        //初始化右边
        QWidget* right=new QWidget(this);
        main_layout->addWidget(right);
        right->setFixedWidth(300);
        QVBoxLayout* right_layout=new QVBoxLayout(right);

        //数据操作部分
        QGroupBox* group_box=new QGroupBox(this);
        group_box->setTitle("数据操作");
        right_layout->addWidget(group_box);
        QGridLayout* group_box_layout=new QGridLayout(group_box);

        name=new QLabel("姓名",this);
        name_edit=new QLineEdit(this);
        add=new QPushButton("添加一行",this);
        group_box_layout->addWidget(name,0,0);
        group_box_layout->addWidget(name_edit,0,1);
        group_box_layout->addWidget(add,0,2);

        gender=new QLabel("性别",this);
        gender_edit=new QLineEdit(this);
        insert=new QPushButton("插入一行",this);
        group_box_layout->addWidget(gender,1,0);
        group_box_layout->addWidget(gender_edit,1,1);
        group_box_layout->addWidget(insert,1,2);

        age=new QLabel("年龄",this);
        age_edit=new QLineEdit(this);
        del=new QPushButton("删除选中行",this);
        group_box_layout->addWidget(age,2,0);
        group_box_layout->addWidget(age_edit,2,1);
        group_box_layout->addWidget(del,2,2);

        province=new QLabel("籍贯",this);
        province_edit=new QLineEdit(this);
        mod=new QPushButton("修改选中行",this);
        group_box_layout->addWidget(province,3,0);
        group_box_layout->addWidget(province_edit,3,1);
        group_box_layout->addWidget(mod,3,2);

        group_box_layout->setVerticalSpacing(20);

        QHBoxLayout* layout_1=new QHBoxLayout();
        right_layout->addLayout(layout_1);

        QGroupBox* outlooking_setting=new QGroupBox(this);
        outlooking_setting->setTitle("外观设置");
        QVBoxLayout* layout_2=new QVBoxLayout(outlooking_setting);
        layout_1->addWidget(outlooking_setting);

        QCheckBox* row_head=new QCheckBox("行表头",this);
        QCheckBox* col_head=new QCheckBox("列表头",this);
        QCheckBox* alter_back_color=new QCheckBox("交替背景色",this);
        QCheckBox* editable=new QCheckBox("单元格可编辑",this);
        QCheckBox* style_sheet=new QCheckBox("设置样式表",this);

        layout_2->addWidget(row_head);
        layout_2->addWidget(col_head);
        layout_2->addWidget(alter_back_color);
        layout_2->addWidget(editable);
        layout_2->addWidget(style_sheet);

        //初始化复选框的选中状态
        row_head->setChecked(table->horizontalHeader()->isHidden()?false:true);
        col_head->setChecked(table->verticalHeader()->isHidden()?false:true);
        alter_back_color->setChecked(table->alternatingRowColors()?true:false);
        //如果为NoEditTriggers则表示单元格不可编辑
        editable->setChecked(table->editTriggers()==QAbstractItemView::NoEditTriggers?false:true);

        QGroupBox* select_setting=new QGroupBox(this);
        select_setting->setTitle("选择设置");
        layout_1->addWidget(select_setting);
        QVBoxLayout* layout_3=new QVBoxLayout(select_setting);

        QRadioButton* select_single=new QRadioButton("选择单元格",this);
        QRadioButton* select_one_row=new QRadioButton("选择行",this);
        layout_3->addWidget(select_single);
        layout_3->addWidget(select_one_row);

        //初始化单选按钮的选中状态
        int select_mode=table->selectionBehavior();
        if(select_mode==QAbstractItemView::SelectItems)
        {
            select_single->setChecked(true);
        }
        else if(select_mode==QAbstractItemView::SelectRows)
        {
            select_one_row->setChecked(true);
        }



        //将当前选中的行显示到编辑框中
        //绑定QTableWidget的itemClicked信号
        connect(table,&QTableWidget::itemClicked,this,[=](QTableWidgetItem* item){
            //获取到当前选中的行,下面两种方法都可
            //int cur_row=table->currentRow();
            int cur_row=item->row();

            //获取当前行中每一个item
            name_edit->setText(table->item(cur_row,0)->text());
            gender_edit->setText(table->item(cur_row,1)->text());
            age_edit->setText(table->item(cur_row,2)->text());
            province_edit->setText(table->item(cur_row,3)->text());
        });

        //尾部添加一行
        connect(add,&QPushButton::clicked,this,[=](){
            //在添加之前,我们要先获取行数,把行数+1,开辟空间
            //如果添加n行,那么要先把行数+n
            int row=table->rowCount();
            table->setRowCount(row+1);

            QTableWidgetItem* name_item=new QTableWidgetItem(name_edit->text());
            QTableWidgetItem* gender_item=new QTableWidgetItem(gender_edit->text());
            QTableWidgetItem* age_item=new QTableWidgetItem(age_edit->text());
            QTableWidgetItem* province_item=new QTableWidgetItem(province_edit->text());

            //设置居中对齐
            name_item->setTextAlignment(Qt::AlignCenter);
            gender_item->setTextAlignment(Qt::AlignCenter);
            age_item->setTextAlignment(Qt::AlignCenter);
            province_item->setTextAlignment(Qt::AlignCenter);

            //行数的索引是从0开始的,所以新增行的索引就是row
            //填充单元格数据
            table->setItem(row,0,name_item);
            table->setItem(row,1,gender_item);
            table->setItem(row,2,age_item);
            table->setItem(row,3,province_item);
        });

        //当前行之前插入一行
        connect(insert,&QPushButton::clicked,this,[=](){
            //获取所有选中项
            auto select_items=table->selectedItems();
            if(select_items.empty())
            {
                //为空,证明没有选中
                return;
            }
            //只获取第一个选中项的行号
            int cur_row=select_items[0]->row();
            //在选中项前插入一行
            table->insertRow(cur_row);

            QTableWidgetItem* name_item=new QTableWidgetItem(name_edit->text());
            QTableWidgetItem* gender_item=new QTableWidgetItem(gender_edit->text());
            QTableWidgetItem* age_item=new QTableWidgetItem(age_edit->text());
            QTableWidgetItem* province_item=new QTableWidgetItem(province_edit->text());

            //设置居中对齐
            name_item->setTextAlignment(Qt::AlignCenter);
            gender_item->setTextAlignment(Qt::AlignCenter);
            age_item->setTextAlignment(Qt::AlignCenter);
            province_item->setTextAlignment(Qt::AlignCenter);

            //填充单元格数据
            table->setItem(cur_row,0,name_item);
            table->setItem(cur_row,1,gender_item);
            table->setItem(cur_row,2,age_item);
            table->setItem(cur_row,3,province_item);
        });

        //删除选中行
        connect(del,&QPushButton::clicked,this,[=](){
            //获取所有选中项
            auto select_items=table->selectedItems();
            if(select_items.empty())
            {
                //为空,证明没有选中
                return;
            }
            //只获取第一个选中项的行号
            int cur_row=select_items[0]->row();

            //删除选中行
            table->removeRow(cur_row);
        });

        //修改选中行
        connect(mod,&QPushButton::clicked,this,[=](){
            //获取所有选中项
            auto select_items=table->selectedItems();
            if(select_items.empty())
            {
                //为空,证明没有选中
                return;
            }
            //只获取第一个选中项的行号
            int cur_row=select_items[0]->row();

            //修改单元格数据
            table->item(cur_row,0)->setText(name_edit->text());
            table->item(cur_row,1)->setText(gender_edit->text());
            table->item(cur_row,2)->setText(age_edit->text());
            table->item(cur_row,3)->setText(province_edit->text());
        });

        //是否显示行表头
        connect(row_head,&QCheckBox::clicked,this,[=](){
            if(row_head->isChecked())
            {
                //选中后显示行表头
                table->horizontalHeader()->show();
            }
            else
            {
                //未选中则隐藏行表头
                table->horizontalHeader()->hide();
            }
        });

        //是否显示列表头
        connect(col_head,&QCheckBox::clicked,this,[=](){
            if(col_head->isChecked())
            {
                table->verticalHeader()->show();
            }
            else
            {
                table->verticalHeader()->hide();
            }
        });

        //是否交替切换行背景色
        connect(alter_back_color,&QCheckBox::clicked,this,[=](){
            if(alter_back_color->isChecked())
            {
                //win11该接口失效
                table->setAlternatingRowColors(true);
            }
            else
            {
                table->setAlternatingRowColors(false);
            }
        });

        //单元格是否可编辑
        connect(editable,&QCheckBox::clicked,this,[=](){
            if(editable->isChecked())
            {
                //双击、选中后单击、选中后按F2键都可编辑单元格
                table->setEditTriggers(QAbstractItemView::DoubleClicked |
                                       QAbstractItemView::SelectedClicked |
                                       QAbstractItemView::EditKeyPressed);

            }
            else
            {
                table->setEditTriggers(QAbstractItemView::NoEditTriggers);
            }
        });

        //设置样式表
        connect(style_sheet,&QCheckBox::clicked,this,[=](){
            if(style_sheet->isChecked())
            {
                //单元格的样式
                QString cellStyle = R"(
        QTableView
        {
            text-align:center;
            background-color: rgba(255, 255, 255, 0);
            alternate-background-color:#e3edf9;
            font:14px "微软雅黑";
            color:#677483;
            gridline-color: #ccddf0;
        }
    )";

                //行表头的样式
                const QString horizontalHeaderStyle = R"(
        QHeaderView::section {
            color: black;
            font:bold 14px "微软雅黑";
            text-align:center;
            height:32px;
            background-color: #d1dff0;
            border:1px solid #8faac9;
            border-left:none;
        }
    )";
                //列表头的样式
                const QString verticalHeaderStyle = R"(
        QHeaderView::section {
            color: black;
            font:bold 14px "微软雅黑";
            width:60px;
            text-align:center;

            background-color: #d1dff0;
            border:1px solid #8faac9;
            border-left:none;
        }
    )";
                table->setStyleSheet(cellStyle);
                table->horizontalHeader()->setStyleSheet(horizontalHeaderStyle);
                table->verticalHeader()->setStyleSheet(verticalHeaderStyle);
            }
            else
            {
                table->setStyleSheet("");
                table->horizontalHeader()->setStyleSheet("");
                table->verticalHeader()->setStyleSheet("");
            }
        });

        //设置鼠标点击时只选中单元格
        connect(select_single,&QRadioButton::clicked,this,[=](){
            if(select_single->isChecked())
            {
                table->setSelectionBehavior(QAbstractItemView::SelectItems);
            }
        });

        //设置鼠标点击时选中一整行
        connect(select_one_row,&QRadioButton::clicked,this,[=](){
            if(select_one_row->isChecked())
            {
                table->setSelectionBehavior(QAbstractItemView::SelectRows);
            }
        });

    }

    ~Widget()=default;
private:
    QTableWidget* table;

    //数据操作
    QLabel* name;
    QLineEdit* name_edit;
    QPushButton* add;

    QLabel* gender;
    QLineEdit* gender_edit;
    QPushButton* insert;

    QLabel* age;
    QLineEdit* age_edit;
    QPushButton* del;

    QLabel* province;
    QLineEdit* province_edit;
    QPushButton* mod;

};
#endif // WIDGET_H

 学习链接:https://github.com/0voice

 

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

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

相关文章

【CKA】一、基于角色的访问控制-RBAC

1、基于角色的访问控制-RBAC 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 这道题就三条命令&#xff0c;建议直接背熟就行。 也可以查看帮助 kubectl create clusterrole -h kubectl create serviceaccount -h kubectl create rolebinding -h 注意&#xff1a; 1、资…

Prisma 基本使用

以下内容官方文档都有&#xff0c;特此记录便于快速查阅文档。 Prisma CLI 作为开发依赖项安装到项目中 npm install prisma --save-devPrisma 配合 ts 很强大&#xff0c;所有我们可以结合 ts 一起使用&#xff1a; npm install typescript ts-node types/node --save-dev n…

对于“言而有信”之己见

大凡古文爱好者&#xff0c;都知晓《论语》中的“仁、义、礼、智、信”这五大做人的常理。 网络图片 儒家对于“言而有信”的认识十分理性&#xff0c;尤其是其中的“信”字&#xff0c;对于当今社会成堆“老赖”&#xff0c;简直就是直接打在他们脸上的大巴掌。​ 古人对于“…

强化学习-python案例

强化学习是一种机器学习方法&#xff0c;旨在通过与环境的交互来学习最优策略。它的核心概念是智能体&#xff08;agent&#xff09;在环境中采取动作&#xff0c;从而获得奖励或惩罚。智能体的目标是最大化长期奖励&#xff0c;通过试错的方式不断改进其决策策略。 在强化学习…

传统操作系统和分布式操作系统的区别

分布式操作系统和传统操作系统之间的区别&#xff0c;根植于它们各自的设计哲学和目标。要理解这些差异&#xff0c;需要从操作系统的基本定义、结构、功能以及它们在不同计算环境中的表现进行分析。每种系统都试图解决特定的计算挑战&#xff0c;因此在不同的使用场景下具有各…

互斥量mutex、锁、条件变量和信号量相关原语(函数)----很全

线程相关知识可以看这里: 线程控制原语(函数)的介绍-CSDN博客 进程组、会话、守护进程和线程的概念-CSDN博客 1.同步概念 所谓同步&#xff0c;即同时起步&#xff0c;协调一致。不同的对象&#xff0c;对“同步”的理解方式略有不同。如&#xff0c;设备同步&#xff0c;是…

前端——js补充

一、数学对象 1.随机数 // 0-1 console.log(Math.random()); // 0-9 console.log(Math.random() * 9); // 6-13 console.log(Math.random() * (13 - 6) 6); //n-m Math.random() * (m - n) n 2.取整 // 向下取整 console.log(Math.floor(1.9));//1 // 向上取整 console.log(…

解决端口被占用

当你被你的编译器提醒&#xff0c; 当前端口被占用&#xff0c; 但明明你的服务什么的都没有启用&#xff0c;这时有三种解决办法&#xff1a; 1 。 重启 。 重启解决80%的问题 2 。 修改你的端口号 。 3 。 去windows命令行中查看&#xff0c;端口占用情况 第一步 &#xf…

OpenStack Yoga版安装笔记(十五)Horizon安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

[卸载] 软件彻底卸载工具的下载及详细安装使用过程(附有下载文件)

一般软件安装的有问题&#xff0c;或者想重新安装其他版本就需要将原来的版本删除干净&#xff0c;但常常删不干净&#xff0c;本文分享一个软件彻底卸载工具&#xff0c;完成彻底卸载软件的工作 下载链接在文末 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文…

激光切割机适用材质有哪些

激光切割机是一种利用激光束对各种材料进行高精度、高速度切割的机器设备。其适用材质广泛&#xff0c;包括但不限于以下两大类&#xff1a; 一、金属材料 不锈钢&#xff1a;激光切割机较容易切割不锈钢薄板&#xff0c;使用高功率YAG激光切割系统&#xff0c;切割不锈钢板的…

AMD Instinct™ MI200 GPU内存空间概述

AMD Instinct™ MI200 GPU memory space overview — ROCm Blogs 注意: 本博客之前是 AMD实验室笔记博客系列的一部分。 HIP API 支持在加速系统上为主机和设备内存提供多种分配方式。在本文中&#xff0c;我们将&#xff1a; 1. 介绍一组常用的内存空间 2. 识别每种内存空间的…

Kubernetes强制删除terminating状态的namespace

Kubernetes中的Namespace处于Terminating状态并且常规删除不起作用。 1.Namespace长时间处于Terminating状态往往是因为某些finalizers阻止了它的删除。 kubectl get namespace <namespace-name> -o json > namespace.json 2.编辑生成的 namespace.json文件&#xff…

今日指数项目A股大盘数据采集

1、A股大盘数据采集 1.1 A股大盘数据采集准备 1.1.1 配置ID生成器bean A股大盘数据采集入库时&#xff0c;主键ID保证唯一&#xff0c;所以在stock_job工程配置ID生成器&#xff1a; Configuration public class CommonConfig {/*** 配置基于雪花算法生成全局唯一id* 参与…

打点 - 泛微 E-Cology WorkflowServiceXml

请求路径 /services%20/WorkflowServiceXml显示如下&#xff0c;漏洞可能存在 利用&#xff1a; 根据提示在 CMD 处输入 Memshell 注入内存马&#xff0c;并点击执行&#xff0c;成功注入 冰蝎配置&#xff0c;输入内存马地址 成功连接 命令执行

2024/9/30 英语每日一段

The British Academy has created three high-profile awards to sit alongside the trophies it hands out to adult television shows--going some way, it is hoped, to replace Bafta’s abandoned children’s TV awards event. “Children’s programme-making has been …

【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)

总览 1.下载和解决依赖问题 2.修改相关参数 3.安装过程 一、下载和解决依赖问题 1.下载 去这里看看&#xff0c;填写相关的显卡参数&#xff0c;选择 linux 版本&#xff0c;然后开始下载。 https://www.nvidia.cn/drivers/lookup/ 进入这个选择界面&#xff1a; 开始下载&…

04-指向指针的指针

int main(int argc, const char* argv[]) {int x 5;int* p &x;*p 6;int** q &p;int*** r &q;printf("%d\n", *p);//指向p中的值 6printf("%d\n", *q);// 指向指针p的地址 printf("%d\n", *(*q));//指向p中地址中的值 6print…

3.1K Star,这款开源在线视频下载神器绝了,速度达 30M/S

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 在如今的数字时代&#xff0c;无论是个人用户还是企业&#xff0c;都…

学科竞赛管理平台:SpringBoot框架深度开发

摘 要 随着国家教育体制的改革&#xff0c;全国各地举办的竞赛活动数目也是逐年增加&#xff0c;面对如此大的数目的竞赛信息&#xff0c;传统竞赛管理方式已经无法满足需求&#xff0c;为了提高效率&#xff0c;竞赛管理系统应运而生。 本学科竞赛管理系统以实际运用为开发背景…