Q3DSurface 类

Q3DSurface 类提供了渲染 3D 表面图的函数。更多...

头文件 #include <Q3DSurface>
CMakefind_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmakeQT += graphs
继承 QAbstract3DGraph
状态技术预览

属性

公共函数

Q3DSurface()
virtual~Q3DSurface() override
voidaddAxis(QValue3DAxis *axis)
voidaddSeries(QSurface3DSeries *series)
QList<QValue3DAxis *>axes() const
QValue3DAxis *axisX() const
QValue3DAxis *axisY() const
QValue3DAxis *axisZ() const
boolflipHorizontalGrid() const
voidreleaseAxis(QValue3DAxis *axis)
voidremoveSeries(QSurface3DSeries *series)
QSurface3DSeries *selectedSeries() const
QList<QSurface3DSeries *>seriesList() const
voidsetAxisX(QValue3DAxis *axis)
voidsetAxisY(QValue3DAxis *axis)
voidsetAxisZ(QValue3DAxis *axis)
voidsetFlipHorizontalGrid(bool flip)

信号

voidaxisXChanged(QValue3DAxis *axis)
voidaxisYChanged(QValue3DAxis *axis)
voidaxisZChanged(QValue3DAxis *axis)
voidflipHorizontalGridChanged(bool flip)
voidselectedSeriesChanged(QSurface3DSeries *series)

详细描述

此类允许开发者渲染 3D 表面图并自由旋转场景进行查看。可以通过 QSurface3DSeries 控制表面图的可视属性,如绘制模式和不透明度。

Q3DSurface支持通过显示高亮球来选择用户点击的数据点(当使用默认输入处理程序时,或者通过QSurface3DSeries选择)。选择指针附有一个标签,默认情况下显示数据点的值和该点的坐标。

可以通过QValue3DAxis控制轴上显示的值范围和标签格式。

要旋转图形,请按住鼠标右键并移动鼠标。使用鼠标滚轮进行缩放。两种情况都假定默认输入处理程序正在使用中。

如果没有明确设置X3DSurface的轴,将创建没有标签的临时默认轴。可以通过轴访问器修改这些默认轴,但一旦为该方向显式设置了轴,该方向的默认轴就会被销毁。

如何构建一个最小的Q3DSurface图形

首先,构建Q3DSurface。由于我们在此示例中以顶级窗口运行图形,我们需要清除Qt::FramelessWindowHint标志,该标志默认设置

Q3DSurface surface;
surface.setMinimumSize(QSize(256, 256));

现在Q3DSurface已准备接收要渲染的数据。创建数据元素以接收值

首先,将数据输送到行元素中,然后将它们的指针添加到数据元素中

dataRow1 << QSurfaceDataItem(0.0f, 0.1f, 0.5f) << QSurfaceDataItem(1.0f, 0.5f, 0.5f);
dataRow2 << QSurfaceDataItem(0.0f, 1.8f, 1.0f) << QSurfaceDataItem(1.0f, 1.2f, 1.0f);
data << dataRow1 << dataRow2;

创建一个新的序列并将其数据设置

QSurface3DSeries *series = new QSurface3DSeries;
series->dataProxy()->resetArray(data);
surface.addSeries(series);

最后,需要将其设置为可见

surface.show();

创建和显示此图形所需的完整代码是

#include <QtGraphs>

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

    Q3DSurface surface;
    surface.setMinimumSize(QSize(256, 256));
    QSurfaceDataArray data;
    QSurfaceDataRow dataRow1;
    QSurfaceDataRow dataRow2;

    dataRow1 << QSurfaceDataItem(0.0f, 0.1f, 0.5f) << QSurfaceDataItem(1.0f, 0.5f, 0.5f);
    dataRow2 << QSurfaceDataItem(0.0f, 1.8f, 1.0f) << QSurfaceDataItem(1.0f, 1.2f, 1.0f);
    data << dataRow1 << dataRow2;

    QSurface3DSeries *series = new QSurface3DSeries;
    series->dataProxy()->resetArray(data);
    surface.addSeries(series);
    surface.show();

    return app.exec();
}

这正是这些几行代码产生的结果

可以旋转场景、放大并选择表面点以查看其位置,但在此简化的代码示例中不包含其他交互。您可以通过熟悉提供的示例来了解更多信息,例如Surface Graph Gallery

另请参阅Q3DBarsQ3DScatterQt Graphs C++类的3D图形

属性文档

axisX : QValue3DAxis*

此属性包含活动X轴。

axis作为活动X轴设置。隐式调用addAxis()以便将轴的所有权传递给此图形。

如果axis为null,则创建一个没有标签的临时默认轴,范围自动调整。

如果为同一方向显式设置了另一个轴,则销毁此临时轴。

访问函数

QValue3DAxis *axisX() const
voidsetAxisX(QValue3DAxis *axis)

通知信号

voidaxisXChanged(QValue3DAxis *axis)

另请参阅addAxis()和releaseAxis

axisY : QValue3DAxis*

此属性包含活动Y轴。

axis作为活动Y轴设置。隐式调用addAxis()以便将轴的所有权传递给此图形。

如果axis为null,则创建一个没有标签的临时默认轴,范围自动调整。

如果为同一方向显式设置了另一个轴,则销毁此临时轴。

访问函数

QValue3DAxis *axisY() const
voidsetAxisY(QValue3DAxis *axis)

通知信号

voidaxisYChanged(QValue3DAxis *axis)

另请参阅addAxis()和releaseAxis

axisZ : QValue3DAxis*

此属性包含活动Z轴。

axis作为活动Z轴设置。隐式调用addAxis()以便将轴的所有权传递给此图形。

如果axis为null,则创建一个没有标签的临时默认轴,范围自动调整。

如果为同一方向显式设置了另一个轴,则销毁此临时轴。

访问函数

QValue3DAxis *axisZ() const
voidsetAxisZ(QValue3DAxis *axis)

通知信号

voidaxisZChanged(QValue3DAxis *axis)

另请参阅addAxis()和releaseAxis

flipHorizontalGrid : bool

该属性存储是否在图表顶部而不是底部显示水平轴网格。

在某些使用场景中,水平轴网格很大程度上被表面覆盖,因此通常在图表顶部而不是底部显示水平轴网格更有用。一个典型的用例是使用正交投影和自上而下的视角显示2D频谱。

如果 false,则水平轴网格和标签绘制在图表的水平背景上。如果 true,则水平轴网格和标签绘制在图表与水平背景相反的一侧。默认为 false

访问函数

boolflipHorizontalGrid() const
voidsetFlipHorizontalGrid(bool flip)

通知信号

voidflipHorizontalGridChanged(bool flip)

[只读] selectedSeries : QSurface3DSeries* const

该属性存储选定的系列或null。

如果selectionMode设置为SelectionMultiSeries,则该属性存储拥有选定点的系列。

访问函数

QSurface3DSeries *selectedSeries() const

通知信号

voidselectedSeriesChanged(QSurface3DSeries *series)

成员函数文档

[显式] Q3DSurface::Q3DSurface()

构建一个新的3D曲面图表。

[重写虚拟 noexcept] Q3DSurface::~Q3DSurface()

销毁3D曲面图表。

void Q3DSurface::addAxis(QValue3DAxis *axis)

axis添加到图表中。通过addAxis添加的轴尚未投入使用,addAxis只是用来将axis的所有权赋予图表。The axis不得为null或添加到另一个图表。

另请参阅 releaseAxis(),setAxisX(),setAxisY()和setAxisZ

void Q3DSurface::addSeries(QSurface3DSeries *series)

series添加到图表中。图表可以包含多个系列,但只有一套轴。如果新添加的系列指定了选定的项,则该项将被突出显示,并清除现有选择。只有一个添加的系列可以拥有活动选择。

另请参阅 QAbstract3DGraph::hasSeries

QList<QValue3DAxis *> Q3DSurface::axes() const

返回所有添加的轴的列表。

另请参阅 addAxis

void Q3DSurface::releaseAxis(QValue3DAxis *axis)

如果携带的axis添加到本图表中,则将其所有权归还给调用者。如果释放的axis正在使用中,将创建一个新的默认轴并将其设置为活动状态。

如果默认轴被释放,后来再次添加,则其行为与任何其他轴相同。

另请参阅 addAxis(),setAxisX(),setAxisY(),以及 setAxisZ().

void Q3DSurface::removeSeries(QSurface3DSeries *series)

从图中删除 series

另请参阅 QAbstract3DGraph::hasSeries

QList<QSurface3DSeries *> Q3DSurface::seriesList() const

返回添加到此图中的系列列表。

另请参阅 QAbstract3DGraph::hasSeries

© 2024 Qt公司。此处包含的文档贡献为各自所有者的版权。提供的文档依据GNU自由文档许可版1.3的条款许可,由自由软件基金会发布。Qt及其相关标志是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为各自所有者的财产。