Q3DSurface 类
Q3DSurface 类提供了渲染 3D 表面图的函数。更多...
头文件 | #include <Q3DSurface> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Graphs) target_link_libraries(mytarget PRIVATE Qt6::Graphs) |
qmake | QT += graphs |
继承 | QAbstract3DGraph |
状态 | 技术预览 |
- 所有成员的列表,包括继承的成员
- Q3DSurface 是 Qt 图形 C++ 3D 类 的一部分。
属性
|
公共函数
Q3DSurface() | |
virtual | ~Q3DSurface() override |
void | addAxis(QValue3DAxis *axis) |
void | addSeries(QSurface3DSeries *series) |
QList<QValue3DAxis *> | axes() const |
QValue3DAxis * | axisX() const |
QValue3DAxis * | axisY() const |
QValue3DAxis * | axisZ() const |
bool | flipHorizontalGrid() const |
void | releaseAxis(QValue3DAxis *axis) |
void | removeSeries(QSurface3DSeries *series) |
QSurface3DSeries * | selectedSeries() const |
QList<QSurface3DSeries *> | seriesList() const |
void | setAxisX(QValue3DAxis *axis) |
void | setAxisY(QValue3DAxis *axis) |
void | setAxisZ(QValue3DAxis *axis) |
void | setFlipHorizontalGrid(bool flip) |
信号
void | axisXChanged(QValue3DAxis *axis) |
void | axisYChanged(QValue3DAxis *axis) |
void | axisZChanged(QValue3DAxis *axis) |
void | flipHorizontalGridChanged(bool flip) |
void | selectedSeriesChanged(QSurface3DSeries *series) |
详细描述
此类允许开发者渲染 3D 表面图并自由旋转场景进行查看。可以通过 QSurface3DSeries 控制表面图的可视属性,如绘制模式和不透明度。
Q3DSurface支持通过显示高亮球来选择用户点击的数据点(当使用默认输入处理程序时,或者通过QSurface3DSeries选择)。选择指针附有一个标签,默认情况下显示数据点的值和该点的坐标。
可以通过QValue3DAxis控制轴上显示的值范围和标签格式。
要旋转图形,请按住鼠标右键并移动鼠标。使用鼠标滚轮进行缩放。两种情况都假定默认输入处理程序正在使用中。
如果没有明确设置X3DSurface的轴,将创建没有标签的临时默认轴。可以通过轴访问器修改这些默认轴,但一旦为该方向显式设置了轴,该方向的默认轴就会被销毁。
如何构建一个最小的Q3DSurface图形
首先,构建Q3DSurface。由于我们在此示例中以顶级窗口运行图形,我们需要清除Qt::FramelessWindowHint
标志,该标志默认设置
Q3DSurface surface; surface.setMinimumSize(QSize(256, 256));
现在Q3DSurface已准备接收要渲染的数据。创建数据元素以接收值
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();
创建和显示此图形所需的完整代码是
#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。
另请参阅Q3DBars、Q3DScatter和Qt Graphs C++类的3D图形。
属性文档
axisX : QValue3DAxis*
此属性包含活动X轴。
将axis作为活动X轴设置。隐式调用addAxis()以便将轴的所有权传递给此图形。
如果axis为null,则创建一个没有标签的临时默认轴,范围自动调整。
如果为同一方向显式设置了另一个轴,则销毁此临时轴。
访问函数
QValue3DAxis * | axisX() const |
void | setAxisX(QValue3DAxis *axis) |
通知信号
void | axisXChanged(QValue3DAxis *axis) |
另请参阅addAxis()和releaseAxis。
axisY : QValue3DAxis*
此属性包含活动Y轴。
将axis作为活动Y轴设置。隐式调用addAxis()以便将轴的所有权传递给此图形。
如果axis为null,则创建一个没有标签的临时默认轴,范围自动调整。
如果为同一方向显式设置了另一个轴,则销毁此临时轴。
访问函数
QValue3DAxis * | axisY() const |
void | setAxisY(QValue3DAxis *axis) |
通知信号
void | axisYChanged(QValue3DAxis *axis) |
另请参阅addAxis()和releaseAxis。
axisZ : QValue3DAxis*
此属性包含活动Z轴。
将axis作为活动Z轴设置。隐式调用addAxis()以便将轴的所有权传递给此图形。
如果axis为null,则创建一个没有标签的临时默认轴,范围自动调整。
如果为同一方向显式设置了另一个轴,则销毁此临时轴。
访问函数
QValue3DAxis * | axisZ() const |
void | setAxisZ(QValue3DAxis *axis) |
通知信号
void | axisZChanged(QValue3DAxis *axis) |
另请参阅addAxis()和releaseAxis。
flipHorizontalGrid : bool
该属性存储是否在图表顶部而不是底部显示水平轴网格。
在某些使用场景中,水平轴网格很大程度上被表面覆盖,因此通常在图表顶部而不是底部显示水平轴网格更有用。一个典型的用例是使用正交投影和自上而下的视角显示2D频谱。
如果 false
,则水平轴网格和标签绘制在图表的水平背景上。如果 true
,则水平轴网格和标签绘制在图表与水平背景相反的一侧。默认为 false
。
访问函数
bool | flipHorizontalGrid() const |
void | setFlipHorizontalGrid(bool flip) |
通知信号
void | flipHorizontalGridChanged(bool flip) |
[只读]
selectedSeries : QSurface3DSeries* const
该属性存储选定的系列或null。
如果selectionMode设置为SelectionMultiSeries
,则该属性存储拥有选定点的系列。
访问函数
QSurface3DSeries * | selectedSeries() const |
通知信号
void | selectedSeriesChanged(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
返回添加到此图中的系列列表。
© 2024 Qt公司。此处包含的文档贡献为各自所有者的版权。提供的文档依据GNU自由文档许可版1.3的条款许可,由自由软件基金会发布。Qt及其相关标志是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为各自所有者的财产。