QStandardItemModel的函数和信号介绍

news2025/5/27 14:46:17

前言

Qt版本:6.8.0

QStandardItem函数介绍

函数

部分函数有不同的重载来适应不同的模型,例如appendrow

构造函数与析构函数

1. QStandardItemModel(QObject *parent = nullptr)
  • 说明:创建一个空的模型(0行0列)。
  • 参数
    • parent:父对象(通常用于内存管理)。
  • 示例
    QStandardItemModel *model = new QStandardItemModel(this); // 创建空模型
    
2. QStandardItemModel(int rows, int columns, QObject *parent = nullptr)
  • 说明:创建指定行数和列数的模型,所有项初始化为空。
  • 参数
    • rows:初始行数。
    • columns:初始列数。
    • parent:父对象。
  • 示例
    QStandardItemModel *model = new QStandardItemModel(3, 2, this); // 3行2列-表格模型
    
    QStandardItemModel *model = new QStandardItemModel(3, 1, this); // 3行1列-列表模型
    
3. virtual ~QStandardItemModel()
  • 说明:析构函数,销毁模型及其所有项。

核心数据操作

4. void appendColumn(const QList<QStandardItem *> &items)
  • 说明:在模型末尾添加一列,用 items 填充。
  • 参数
    • items:列项的列表(长度需等于当前行数)。
  • 示例
    QList<QStandardItem*> columnItems;
    columnItems << new QStandardItem("A1") << new QStandardItem("A2");
    model->appendColumn(columnItems); // 添加一列(假设当前有2行)
    
5. void appendRow(const QList<QStandardItem *> &items)–适用于表格模型
  • 说明:在末尾添加一行,用 items 填充列。
  • 参数
    • items:行项的列表(长度需等于当前列数)。
  • 示例
    QList<QStandardItem*> rowItems;
    rowItems << new QStandardItem("Cell1") << new QStandardItem("Cell2");
    model->appendRow(rowItems); // 添加一行(假设当前有2列)
    
6. void appendRow(QStandardItem *item)–适用于列表模型
  • 说明:在末尾添加一行,仅填充第0列的项。
  • 参数
    • item:单个项的指针。
  • 示例
    model->appendRow(new QStandardItem("Row Header")); // 添加一行,第0列有数据
    
7. QBindable bindableSortRole()
  • 说明:返回排序角色的可绑定对象(用于属性绑定)。
  • 返回值QBindable<int>,可监听排序角色变化。
  • 示例
    QBindable<int> bindable = model->bindableSortRole();
    bindable.setBinding([&](){ return Qt::DisplayRole; }); // 绑定排序角色到 DisplayRole
    
8. void clear()
  • 说明:清空模型所有数据(包括行、列、表头)。
  • 示例
    model->clear(); // 清空模型
    
9. QList<QStandardItem *> findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const
  • 说明:查找匹配 text 的项。
  • 参数
    • text:要匹配的文本。
    • flags:匹配模式(如 Qt::MatchContains)。
    • column:搜索的列(默认第0列)。
  • 返回值:匹配项的列表。
  • 示例
    QList<QStandardItem*> found = model->findItems("Alice", Qt::MatchExactly, 0);
    
10. QStandardItem *horizontalHeaderItem(int column) const
  • 说明:获取水平表头指定列的项。
  • 参数
    • column:列索引。
  • 返回值:表头项的指针,若不存在返回 nullptr
  • 示例
    QStandardItem *header = model->horizontalHeaderItem(0); // 获取第0列表头
    
11. QModelIndex indexFromItem(const QStandardItem *item) const
  • 说明:获取项对应的 QModelIndex
  • 参数
    • item:要查询的项。
  • 返回值:项的索引,无效项返回 QModelIndex()
  • 示例
    QStandardItem *item = model->item(0, 0);
    QModelIndex index = model->indexFromItem(item); // 获取索引
    
12. void insertColumn(int column, const QList<QStandardItem *> &items)
  • 说明:在指定列插入数据。
  • 参数
    • column:插入的列索引。
    • items:列项的列表。
  • 示例
    QList<QStandardItem*> newColumn;
    newColumn << new QStandardItem("X") << new QStandardItem("Y");
    model->insertColumn(1, newColumn); // 在第1列插入数据
    
13. bool insertColumn(int column, const QModelIndex &parent = QModelIndex())
  • 说明:插入空列(继承自 QAbstractItemModel)。
  • 参数
    • column:插入的列索引。
    • parent:父索引(对表格模型无效)。
  • 返回值:成功返回 true
  • 示例
    model->insertColumn(1); // 在第1列插入空列
    
14. void insertRow(int row, const QList<QStandardItem *> &items)
  • 说明:在指定行插入数据。
  • 参数
    • row:插入的行索引。
    • items:行项的列表。
  • 示例
    QList<QStandardItem*> newRow;
    newRow << new QStandardItem("New1") << new QStandardItem("New2");
    model->insertRow(1, newRow); // 在第1行插入数据
    
15. bool insertRow(int row, const QModelIndex &parent = QModelIndex())
  • 说明:插入空行(继承自 QAbstractItemModel)。
  • 参数
    • row:插入的行索引。
    • parent:父索引(对表格模型无效)。
  • 返回值:成功返回 true
  • 示例
    model->insertRow(1); // 在第1行插入空行
    
16. void insertRow(int row, QStandardItem *item)
  • 说明:插入单列行(仅填充第0列)。
  • 参数
    • row:插入的行索引。
    • item:第0列的项。
  • 示例
    model->insertRow(1, new QStandardItem("Single Column")); // 插入一行,仅第0列有数据
    
17. QStandardItem *invisibleRootItem() const
  • 说明:返回模型的根项(用于树形结构)。
  • 返回值:根项的指针。
  • 示例
    QStandardItem *root = model->invisibleRootItem();
    
18. QStandardItem *item(int row, int column = 0) const
  • 说明:获取指定行和列的项。
  • 参数
    • row:行索引。
    • column:列索引(默认0)。
  • 返回值:项的指针,若不存在返回 nullptr
  • 示例
    QStandardItem *cell = model->item(0, 1); // 获取第0行第1列的项
    
19. QStandardItem *itemFromIndex(const QModelIndex &index) const
  • 说明:从视图索引获取项。
  • 参数
    • index:视图提供的索引。
  • 返回值:项的指针。
  • 示例
    QModelIndex index = model->index(0, 0);
    QStandardItem *item = model->itemFromIndex(index); // 获取对应项
    
20. const QStandardItem *itemPrototype() const
  • 说明:返回创建新项时使用的原型。
  • 返回值:原型项的指针。
  • 示例
    const QStandardItem *prototype = model->itemPrototype();
    

表头与元数据

21. void setColumnCount(int columns)
  • 说明:设置列数(自动扩展或收缩)。
  • 参数
    • columns:目标列数。
  • 示例
    model->setColumnCount(3); // 设置模型为3列
    
22. void setHorizontalHeaderItem(int column, QStandardItem *item)
  • 说明:设置水平表头某一列的项。
  • 参数
    • column:列索引。
    • item:表头项。
  • 示例
    QStandardItem *headerItem = new QStandardItem("ID");
    model->setHorizontalHeaderItem(0, headerItem); // 设置第0列表头为"ID"
    
23. void setHorizontalHeaderLabels(const QStringList &labels)
  • 说明:设置水平表头的标签。
  • 参数
    • labels:标签列表。
  • 示例
    model->setHorizontalHeaderLabels({"Name", "Age"}); // 设置两列的标题
    
24. void setItem(int row, int column, QStandardItem *item)
  • 说明:设置指定行和列的项。
  • 参数
    • row:行索引。
    • column:列索引。
    • item:项的指针。
  • 示例
    model->setItem(0, 1, new QStandardItem("25")); // 第0行第1列设置为"25"
    
25. void setItem(int row, QStandardItem *item)
  • 说明:设置指定行第0列的项。
  • 参数
    • row:行索引。
    • item:项的指针。
  • 示例
    model->setItem(0, new QStandardItem("Alice")); // 第0行第0列设置为"Alice"
    
26. void setItemPrototype(const QStandardItem *item)
  • 说明:设置创建新项时使用的原型(克隆属性)。
  • 参数
    • item:原型项。
  • 示例
    QStandardItem *prototype = new QStandardItem();
    prototype->setForeground(Qt::red); // 默认文本颜色为红色
    model->setItemPrototype(prototype); // 所有新项将继承此属性
    
27. void setItemRoleNames(const QHash<int, QByteArray> &roleNames)
  • 说明:设置自定义角色名称(用于数据绑定)。
  • 参数
    • roleNames:角色ID与名称的映射。
  • 示例
    QHash<int, QByteArray> roles;
    roles[Qt::UserRole + 1] = "customRole";
    model->setItemRoleNames(roles);
    
28. void setRowCount(int rows)
  • 说明:设置行数(自动扩展或收缩)。
  • 参数
    • rows:目标行数。
  • 示例
    model->setRowCount(5); // 设置模型为5行
    
29. void setSortRole(int role)
  • 说明:设置排序时使用的角色(如 Qt::DisplayRole)。
  • 参数
    • role:角色ID。
  • 示例
    model->setSortRole(Qt::UserRole); // 排序时使用自定义角色数据
    
30. void setVerticalHeaderItem(int row, QStandardItem *item)
  • 说明:设置垂直表头某一行的项。
  • 参数
    • row:行索引。
    • item:表头项。
  • 示例
    QStandardItem *rowHeader = new QStandardItem("Row1");
    model->setVerticalHeaderItem(0, rowHeader); // 设置第0行表头
    
31. void setVerticalHeaderLabels(const QStringList &labels)
  • 说明:设置垂直表头的标签。
  • 参数
    • labels:标签列表。
  • 示例
    model->setVerticalHeaderLabels({"Row1", "Row2"}); // 设置两行的行标题
    
32. int sortRole() const
  • 说明:返回当前排序使用的角色。
  • 返回值:角色ID。
  • 示例
    int role = model->sortRole(); // 获取当前排序角色
    

移除数据

33. QList<QStandardItem *> takeColumn(int column)
  • 说明:移除并返回指定列的所有项。
  • 参数
    • column:列索引。
  • 返回值:被移除项的列表。
  • 示例
    QList<QStandardItem*> removed = model->takeColumn(0); // 移除第0列
    
34. QStandardItem *takeHorizontalHeaderItem(int column)
  • 说明:移除并返回水平表头的某一项。
  • 参数
    • column:列索引。
  • 返回值:被移除的表头项。
  • 示例
    QStandardItem *header = model->takeHorizontalHeaderItem(0); // 移除第0列表头
    
35. QStandardItem *takeItem(int row, int column = 0)
  • 说明:移除并返回指定位置的项。
  • 参数
    • row:行索引。
    • column:列索引(默认0)。
  • 返回值:被移除的项。
  • 示例
    QStandardItem *item = model->takeItem(0, 1); // 移除第0行第1列的项
    
36. QList<QStandardItem *> takeRow(int row)
  • 说明:移除并返回指定行的所有项。
  • 参数
    • row:行索引。
  • 返回值:被移除的行项列表。
  • 示例
    QList<QStandardItem*> rowItems = model->takeRow(0); // 移除第0行
    
37. QStandardItem *takeVerticalHeaderItem(int row)
  • 说明:移除并返回垂直表头的某一项。
  • 参数
    • row:行索引。
  • 返回值:被移除的表头项。
  • 示例
    QStandardItem *header = model->takeVerticalHeaderItem(0); // 移除第0行表头
    
38. QStandardItem *verticalHeaderItem(int row) const
  • 说明:获取垂直表头某一行的项。
  • 参数
    • row:行索引。
  • 返回值:表头项的指针。
  • 示例
    QStandardItem *header = model->verticalHeaderItem(0); // 获取第0行表头
    

已重写的虚函数

在这里插入图片描述

信号

39. void itemChanged(QStandardItem *item)
  • 说明:当项的数据(如文本、颜色)被修改时触发。
  • 连接示例
    connect(model, &QStandardItemModel::itemChanged, [](QStandardItem *item) {
        qDebug() << "Item changed:" << item->text();
    });
    

使用QStandardItemModel自定义模型

一、列表模型(QListView + QStandardItemModel)

#include <QApplication>
#include <QListView>
#include <QStandardItemModel>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建模型和视图
    QStandardItemModel model;
    QListView listView;

    // 添加列表项
    QList<QStandardItem*> items;
    for (int i = 0; i < 5; ++i) {
        QStandardItem *item = new QStandardItem(QString("Item %1").arg(i));
        item->setCheckable(true); // 可选中的复选框
        items.append(item);
    }
    model.appendColumn(items);

    // 设置模型并显示
    listView.setModel(&model);
    listView.setEditTriggers(QAbstractItemView::DoubleClicked); // 允许双击编辑
    listView.show();

    // 处理项修改信号
    QObject::connect(&model, &QStandardItemModel::itemChanged, [](QStandardItem *item) {
        qDebug() << "Item changed:" << item->text();
    });

    return app.exec();
}

说明:

  • 创建包含复选框的可编辑列表
  • 双击项目可修改文本内容
  • 通过 itemChanged 信号监听修改事件

二、表格模型(QTableView + QStandardItemModel)

#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建模型(3行3列)
    QStandardItemModel model(3, 3);
    QTableView tableView;

    // 设置表头
    model.setHorizontalHeaderLabels({"Name", "Age", "Occupation"});

    // 填充数据
    for (int row = 0; row < 3; ++row) {
        for (int col = 0; col < 3; ++col) {
            QStandardItem *item = new QStandardItem(QString("R%1C%2").arg(row).arg(col));
            if (col == 1) item->setData(QVariant(20 + row), Qt::EditRole); // 数字类型数据
            model.setItem(row, col, item);
        }
    }

    // 自定义显示特性
    model.item(0, 0)->setForeground(Qt::blue);  // 设置文字颜色
    model.item(1, 1)->setBackground(Qt::yellow); // 设置背景色

    // 设置视图
    tableView.setModel(&model);
    tableView.resize(400, 200);
    tableView.show();

    return app.exec();
}

说明:

  • 创建 3x3 表格并设置表头
  • 第二列存储数值类型数据
  • 演示单元格颜色设置
  • 默认支持直接编辑单元格内容

三、树模型(QTreeView + QStandardItemModel)

#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QStandardItemModel model;
    QTreeView treeView;

    // 创建根节点
    QStandardItem *root = new QStandardItem("Root");
    model.appendRow(root);

    // 添加子节点
    for (int i = 0; i < 3; ++i) {
        QStandardItem *parentItem = new QStandardItem(QString("Parent %1").arg(i));
        root->appendRow(parentItem);

        // 添加子节点的子节点
        for (int j = 0; j < 2; ++j) {
            QStandardItem *childItem = new QStandardItem(QString("Child %1").arg(j));
            childItem->setIcon(QIcon(":/icons/child.png")); // 设置图标
            parentItem->appendRow(childItem);
        }
    }

    // 设置模型并显示
    treeView.setModel(&model);
    treeView.expandAll(); // 展开所有节点
    treeView.show();

    // 处理节点选择
    QObject::connect(treeView.selectionModel(), &QItemSelectionModel::selectionChanged,
        [](const QItemSelection &selected) {
            if (!selected.isEmpty()) {
                QModelIndex index = selected.indexes().first();
                qDebug() << "Selected:" << index.data().toString();
            }
        });

    return app.exec();
}

说明:

  • 创建三级树形结构(Root → Parent → Child)
  • 为子节点添加图标
  • 自动展开所有节点
  • 监听节点选择事件

四、关键特性总结

  1. 通用功能:

    • 内置数据存储
    • 自动视图同步
    • 支持拖放操作(需启用相关属性)
    • 提供丰富的信号(itemChanged、rowsInserted 等)
  2. 自定义扩展:

    // 设置自定义角色数据
    item->setData("custom data", Qt::UserRole + 1);
    
    // 自定义显示
    item->setFont(QFont("Arial", 12, QFont::Bold));
    item->setToolTip("This is a tooltip");
    
  3. 数据持久化:

    // 保存模型数据到文件
    QFile file("data.xml");
    file.open(QIODevice::WriteOnly);
    model.save(&file, QStandardItemModel::XmlRole);
    
    // 从文件加载
    model.load(&file, QStandardItemModel::XmlRole);
    

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

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

相关文章

Python 内存管理机制详解:从分配到回收的全流程剖析

在 Python 编程中&#xff0c;开发者无需像 C/C 那样手动分配和释放内存&#xff0c;但这并不意味着内存管理与我们无关。了解 Python 内存管理机制&#xff0c;能帮助我们编写出更高效、稳定的代码。接下来&#xff0c;我们将深入剖析 Python 内存管理的各个环节&#xff0c;并…

【报错】Error attempting to get column ‘created_time‘ from result set.解决方法

postman报错以下内容 {"code": "500","msg": "查询失败&#xff1a;Error attempting to get column created_time from result set. Cause: java.sql.SQLFeatureNotSupportedException\n; null; nested exception is java.sql.SQLFeatur…

Google 推出 Flow —— AI 电影制作新平台

这周, Google I/O 2025 大会上发布了一些重磅 AI 公告。 他们推出了全新的图像模型 Imagen 4,还发布了升级版视频生成器 Veo 3、升级版 Gemini Pro 模型,以及一系列其他令人印象深刻的更新。 但将所有这些生成式媒体工具整合在一起的,是他们称为 Flow 的平台。 什么是 F…

跨链风云:打破区块链孤岛,实现价值自由流转

嘿&#xff0c;各位技术爱好者们&#xff01;今天我们来聊一个区块链领域非常火热且至关重要的话题——跨链技术。你可能听说过&#xff0c;比如想把在波场&#xff08;Tron&#xff09;链上的USDT转移到以太坊&#xff08;Ethereum&#xff09;网络上&#xff0c;这个过程就涉…

鸿蒙开发:了解$$运算符

前言 本文基于Api13 有这样一个需求&#xff0c;一个Text组件&#xff0c;一个TextInput组件&#xff0c;要求Text组件同步展示TextInput组件里的内容&#xff0c;也就是TextInput组件输入什么内容&#xff0c;就要在Text组件里展示什么内容&#xff0c;这个需求如何实现呢&…

基于CEEMDAN-Transformer-BiLSTM的多特征风速气候预测的完整实现方案及PyTorch源码解析

基于CEEMDAN-Transformer-BiLSTM的多特征风速气候预测的完整实现方案及PyTorch源码解析 一、模型架构设计 1.1 整体框架 该模型采用三级架构设计&#xff08;图1&#xff09;&#xff1a; CEEMDAN分解层&#xff1a;对非平稳风速序列进行自适应分解多模态特征融合模块&#…

基于TypeScript的全栈待办事项应用Demo

Demo地址&#xff1a;git clone https://gitcode.com/rmbnetlife/todo-app.git Todo List 应用 这是一个基于TypeScript的全栈待办事项应用&#xff0c;前端使用React&#xff0c;后端使用Node.js和Express。 项目概述 这个Todo List应用允许用户&#xff1a; 查看所有待办…

国际荐酒师(香港)协会亮相新西兰葡萄酒巡展深度参与赵凤仪大师班

国际荐酒师&#xff08;香港&#xff09;协会率团亮相2025新西兰葡萄酒巡展 深度参与赵凤仪MW“百年百碧祺”大师班 广州/上海/青岛&#xff0c;2025年5月12-16日——国际荐酒师&#xff08;香港&#xff09;协会&#xff08;IRWA&#xff09;近日率专业代表团出席“纯净独特&…

【深度学习】2. 从梯度推导到优化策略:反向传播与 SGD, Mini SGD

反向传播算法详解 1. 前向传播与输出层误差定义 假设我们考虑一个典型的前馈神经网络&#xff0c;其最后一层为 softmax 分类器&#xff0c;损失函数为交叉熵。 前向传播过程 对于某一隐藏层神经元 j j j&#xff1a; 输入&#xff1a; x i x_i xi​ 权重&#xff1a; w j…

工业软件国产化:构建自主创新生态,赋能制造强国建设

随着全球产业环境的变化和技术的发展&#xff0c;建立自主可控的工业体系成为我国工业转型升级、走新型工业化道路、推动国家制造业竞争水平提升的重要抓手。 市场倒逼与政策护航&#xff0c;国产化进程双轮驱动 据中商产业研究院预测&#xff0c;2025年中国工业软件市场规模…

UART、RS232、RS485基础知识

一、UART串口通信介绍 UART是一种采用异步串行、全双工通信方式的通用异步收发传输器功能。 硬件电路&#xff1a; •简单双向串口通信有两根通信线&#xff08;发送端TX和接收端RX&#xff09; •TX与RX要交叉连接 •当只需单向的数据传输时&#xff0c;可以只接一根通信线…

AI重塑数据治理的底层逻辑

AI重塑数据治理的底层逻辑 人治模式&#xff1a;一个必然失败的商业逻辑智治模式&#xff1a;重新定义数据治理的商业模式结语 上个月&#xff0c;一位老友约我喝茶。他是某知名互联网公司的数据总监&#xff0c;聊天时满脸愁容。 “润总&#xff0c;我们公司数据治理团队有50多…

基于 AI 实现阿里云的智能财务管家

新钛云服已累计为您分享844篇技术干货 为了解决传统账单处理中人工查询效率低下、响应速度慢及易出错等问题&#xff0c;同时顺应AI技术发展趋势&#xff0c;提升服务智能化水平。随着业务规模扩大和账单数据复杂度增加&#xff0c;人工处理已难以满足高效管理需求。我们想到通…

【成品论文】2025年电工杯数学建模竞赛B题50页保奖成品论文+matlab/python代码+数据集等(后续会更新)

文末获取资料 多约束条件下城市垃圾分类运输调度问题 摘要 随着城市化进程加快&#xff0c;城市生活垃圾产量持续增长&#xff0c;垃圾分类运输已成为城市环境治理的关键环节。本文针对城市垃圾分类运输中的路径优化与调度问题&#xff0c;综合考虑不同垃圾类型、车辆载重约束…

【node.js】数据库与存储

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. 数据库概述1.1 数据库在Node.js中的作用1.2 Node.js支持的数据库类型 2. 关系型数据库集成2.1 MySQL与Node.js2.1.1 安装MySQL驱动2.1.2 建立连接2.1.3 执行CRUD操作 2.2 PostgreSQL与Node.js2.2.1 安装pg驱…

leetcode2081. k 镜像数字的和-hard

1 题目&#xff1a;k 镜像数字的和 官方标定难度&#xff1a;难 一个 k 镜像数字 指的是一个在十进制和 k 进制下从前往后读和从后往前读都一样的 没有前导 0 的 正 整数。 比方说&#xff0c;9 是一个 2 镜像数字。9 在十进制下为 9 &#xff0c;二进制下为 1001 &#xff…

Halcon 单目相机标定测量

文章目录 双面相机标定链接一维测量gen_cam_par_area_scan_division -为区域扫描相机生成一个相机参数元组&#xff0c;该相机的变形由分割模型建模。(相机自带参数)create_calib_data -创建Halcon 数据标定模型set_calib_data_cam_param -设置校准数据模型中摄像机的类型和初始…

数据被泄露了怎么办?

数据泄露是严重的网络安全事件&#xff0c;需立即采取行动以降低风险。以下是关键应对步骤&#xff1a; 1. 确认泄露范围 核实泄露内容&#xff1a;确定泄露的是密码、财务信息、身份证号还是其他敏感数据。 评估来源&#xff1a;检查是个人设备被入侵、某平台漏洞&#xff0c…

绩效管理缺乏数据支持,如何提高客观性?

要提高绩效管理的客观性&#xff0c;应从建立科学的指标体系、加强数据采集手段、引入自动化绩效工具、强化过程记录机制、定期评估与反馈优化五大方面着手。其中&#xff0c;建立科学的指标体系是关键基础。没有数据支撑的绩效体系&#xff0c;往往容易陷入主观打分、个人偏见…

unity控制相机围绕物体旋转移动

记录一下控制相机围绕物体旋转与移动的脚本&#xff0c;相机操作思路分为两块&#xff0c;一部分为旋转&#xff0c;一部分为移动&#xff0c;旋转是根据当前center中心点的坐标&#xff0c;根据距离设置与默认的旋转进行位置移动&#xff0c;移动是根据相机的左右和前后进行计…