本页内容

QSurfaceDataProxy Class

QSurfaceDataProxy 类是 3D 曲面图的数据代理。更多内容...

头文件: #include <QSurfaceDataProxy>
CMake: find_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmake: QT += graphs
在 QML 中: SurfaceDataProxy
继承自: QAbstractDataProxy
被继承:

QHeightMapSurfaceDataProxy 以及QItemModelSurfaceDataProxy

属性

公共函数

QSurfaceDataProxy(QObject *parent = nullptr)
virtual ~QSurfaceDataProxy() override
qsizetype addRow(QSurfaceDataRow row)
qsizetype addRows(QSurfaceDataArray rows)
qsizetype columnCount() const
void insertRow(qsizetype rowIndex, QSurfaceDataRow row)
void insertRows(qsizetype rowIndex, QSurfaceDataArray rows)
const QSurfaceDataItem &itemAt(QPoint position) const
const QSurfaceDataItem &itemAt(qsizetype rowIndex, qsizetype columnIndex) const
void removeRows(qsizetype rowIndex, qsizetype removeCount)
void resetArray()
void resetArray(QSurfaceDataArray newArray)
qsizetype rowCount() const
QSurface3DSeries *series() const
void setItem(QPoint position, QSurfaceDataItem item)
void setItem(qsizetype rowIndex, qsizetype columnIndex, QSurfaceDataItem item)
void setRow(qsizetype rowIndex, QSurfaceDataRow row)
void setRows(qsizetype rowIndex, QSurfaceDataArray rows)

信号

void arrayReset()
void columnCountChanged(qsizetype count)
void itemChanged(qsizetype rowIndex, qsizetype columnIndex)
void rowCountChanged(qsizetype count)
void rowsAdded(qsizetype startIndex, qsizetype count)
void rowsChanged(qsizetype startIndex, qsizetype count)
void rowsInserted(qsizetype startIndex, qsizetype count)
void rowsRemoved(qsizetype startIndex, qsizetype count)
void seriesChanged(QSurface3DSeries *series)

详细说明

表面数据代理以行形式处理与表面相关的数据。为此,它提供了两个辅助类型别名:QtGraphs::QSurfaceDataArray 和 QtGraphs::QSurfaceDataRow。QSurfaceDataArray 是一个用于控制行的QList 。QSurfaceDataRow 是一个QList ,其中包含QSurfaceDataItem 对象。 有关如何将数据提供给代理的更多信息,请参阅Q3DSurfaceWidgetItem 文档中的示例代码。由于数据以系列形式存储,因此在对数据集使用这些函数之前,必须先创建一个与该代理关联的系列。

所有行必须具有相同数量的项目。

QSurfaceDataProxy 会接管所有传递给它的QSurfaceDataRow 对象的所有权,无论这些对象是直接传递的,还是通过QSurfaceDataArray 容器传递的。若要在将数组添加到代理后使用表面数据行指针直接修改数据,必须发出相应的信号以更新图形。

要构建合理的曲面,所有行中每个相邻项的 x 值在整行范围内必须呈递增或递减趋势。同样,所有列中每个相邻项的 z 值在整列范围内必须呈递增或递减趋势。

注意:目前仅 完全支持行和列均为直线的曲面。如果整个曲面无法完全位于可见的 x 轴或 z 轴范围内,则任何行中元素的 z 值不完全相同,或任何列中元素的 x 值不完全相同的,都可能导致裁剪不正确。

注意: 行数或列数少于两的表面 将渲染为直线。

注意:在 某些环境下 ,包含大量可见顶点的表面可能无法渲染,因为它们超出了图形驱动程序支持的每次绘制顶点数限制。这主要发生在 32 位和 OpenGL ES2 平台上。

另请参阅 Qt Graphs 中的“3D 数据处理”。

属性文档

[read-only] columnCount : qsizetype

该属性存储数据数组中的列数。

访问函数:

qsizetype columnCount() const

通知信号:

void columnCountChanged(qsizetype count)

[read-only] rowCount : qsizetype

该属性存储数据数组中的行数。

访问函数:

qsizetype rowCount() const

通知信号:

void rowCountChanged(qsizetype count)

[read-only] series : QSurface3DSeries*

该属性存储了此代理所关联的系列。

访问函数:

QSurface3DSeries *series() const

通知器信号:

void seriesChanged(QSurface3DSeries *series)

成员函数文档

[explicit] QSurfaceDataProxy::QSurfaceDataProxy(QObject *parent = nullptr)

使用给定的parent 实例化QSurfaceDataProxy。

[override virtual noexcept] QSurfaceDataProxy::~QSurfaceDataProxy()

删除曲面数据代理。

qsizetype QSurfaceDataProxy::addRow(QSurfaceDataRow row)

将新行row 添加到数组的末尾。新行必须与初始数组中的行具有相同的列数。

返回所添加行所在的索引。

qsizetype QSurfaceDataProxy::addRows(QSurfaceDataArray rows)

将新的rows 添加到数组的末尾。新行必须与初始数组中的行具有相同的列数。

返回第一个添加行的索引。

[signal] void QSurfaceDataProxy::arrayReset()

当数据数组被重置时,会发出此信号。如果未调用resetArray() 函数就更改了整个数组的内容,则需要发出此信号以更新图形。

void QSurfaceDataProxy::insertRow(qsizetype rowIndex, QSurfaceDataRow row)

将新行row 插入到rowIndex 中。如果rowIndex 等于数组大小,则新行将追加到数组末尾。新行的列数必须与初始数组中各行的列数相同。

void QSurfaceDataProxy::insertRows(qsizetype rowIndex, QSurfaceDataArray rows)

将新的rows 插入到rowIndex 中。如果rowIndex 等于数组大小,则行将被添加到数组的末尾。新的rows 必须与初始数组中的行数具有相同的列数。

const QSurfaceDataItem &QSurfaceDataProxy::itemAt(QPoint position) const

返回位于位置 `position` 处的项的指针。position 的 x 值表示行,y 值表示列。该项的有效性仅保证持续到下一次修改数据的调用为止。

const QSurfaceDataItem &QSurfaceDataProxy::itemAt(qsizetype rowIndex, qsizetype columnIndex) const

返回指向由rowIndex 和columnIndex 指定的位置处的项的指针。该指针仅在下次修改数据的调用之前保证有效。

[signal] void QSurfaceDataProxy::itemChanged(qsizetype rowIndex, qsizetype columnIndex)

当位于rowIndex 和columnIndex 所指定位置的项目发生变化时,将触发此信号。如果在数组中修改了该项目而未调用setItem(),则需要触发此信号以更新图形。

void QSurfaceDataProxy::removeRows(qsizetype rowIndex, qsizetype removeCount)

删除从位置rowIndex 开始、行数为removeCount 的行。如果尝试删除超出数组末尾的行,则不执行任何操作。

void QSurfaceDataProxy::resetArray()

清空现有数组,并触发arrayReset()信号。

void QSurfaceDataProxy::resetArray(QSurfaceDataArray newArray)

* 设置来自newArray 的数组。如果新数组与* 现有数组相等,则该函数仅触发arrayReset()信号。

[signal] void QSurfaceDataProxy::rowsAdded(qsizetype startIndex, qsizetype count)

当从位置startIndex 开始,向数组中添加由count 指定的行数时,将触发此信号。如果未调用addRow()或addRows()就向数组中添加行,则需要触发此信号以更新图形。

[signal] void QSurfaceDataProxy::rowsChanged(qsizetype startIndex, qsizetype count)

当由count 指定的行数发生变化时,将从startIndex 的位置开始发出此信号。如果在未调用setRow()或setRows()的情况下修改了数组中的行,则需要发出此信号以更新图形。

[signal] void QSurfaceDataProxy::rowsInserted(qsizetype startIndex, qsizetype count)

当在位置startIndex 插入由count 指定的行数时,会触发此信号。

如果未调用insertRow() 或insertRows() 便向数组中插入行,则需要发出此信号以更新图形。

[signal] void QSurfaceDataProxy::rowsRemoved(qsizetype startIndex, qsizetype count)

当从数组末尾移除由 `count ` 指定的行数时(从位置 `startIndex` 开始),将发出此信号。

如果从数组末尾删除行,则该索引即为当前数组大小。如果未调用removeRows() 便从数组中删除行,则必须发出此信号以更新图形。

void QSurfaceDataProxy::setItem(QPoint position, QSurfaceDataItem item)

将位于位置position 处的单个项目更改为项目item 。其中,position 的x值表示行,y值表示列。

void QSurfaceDataProxy::setItem(qsizetype rowIndex, qsizetype columnIndex, QSurfaceDataItem item)

将位于rowIndex 和columnIndex 指定位置的单个项目更改为项目item 。

void QSurfaceDataProxy::setRow(qsizetype rowIndex, QSurfaceDataRow row)

通过将位置为rowIndex 的行替换为由row 指定的新行,来修改现有行。新行可以与已存储在rowIndex 中的现有行相同。新行的列数必须与被替换的行相同。

void QSurfaceDataProxy::setRows(qsizetype rowIndex, QSurfaceDataArray rows)

通过将起始于位置rowIndex 的行替换为由rows 指定的新行,来修改现有行。rows 数组中的行可以与已存储在rowIndex 中的现有行相同。新行的列数必须与被替换行的列数相同。

相关非成员

[alias] QSurfaceDataArray

一个指向QSurfaceDataRow 对象的指针列表。

[alias] QSurfaceDataRow

QSurfaceDataItem 对象的列表。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.