Qt Data Visualization Q3DSurface绘制三维曲面图实例

本文介绍如何使用Qt DataVisualization模块创建3D表面图。通过配置pro文件、引入必要头文件及编写cpp代码实现自定义3D图表,并支持鼠标交互如缩放和平移。
部署运行你感兴趣的模型镜像

1. pro文件中添加配置,然后执行qmake

QT += datavisualization

2. 头文件添加

#include <QtDataVisualization>
#include <QHBoxLayout>
#include <QVBoxLayout>

using namespace QtDataVisualization;

3. cpp代码实现

Q3DSurface *graph = new Q3DSurface();
graph->setFlags(graph->flags() ^ Qt::FramelessWindowHint);
//创建数据对象
QSurfaceDataArray *data = new QSurfaceDataArray;
QSurfaceDataRow *dataRow1 = new QSurfaceDataRow;
QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;
//为数据对象赋值
*dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f);
*dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f);
//*data << dataRow1 << dataRow2;
data->append(dataRow1);
data->append(dataRow2);
//创建序列,加入数据,添加到Q3DSurface
QSurface3DSeries *series = new QSurface3DSeries;
series->dataProxy()->resetArray(data);
graph->addSeries(series);
graph->setWidth(800);
graph->setHeight(600);
graph->show();

4. 实现效果(鼠标滚轮可以缩放,鼠标右键按住不放可以旋转调整视野角度)

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>好的,我现在需要解决用户的问题,即在使用QtDataVisualization绘制三维曲面图时如何改变视角。用户提到了设置相机角度,所以我要围绕这个主题展开。 首先,我得回忆一下QtDataVisualization的相关知识。根据用户提供的引用内容,特别是引用[3]和引用[5],里面提到了Q3DCamera::CameraPreset枚举类型,以及如何通过预设视角来调整相机位置。比如,通过下拉列表选择预设视角,触发currentIndexChanged信号,然后在槽函数中设置activeCamera的预设值。这应该是其中一种方法。接下来,用户可能需要手动调整视角,而不仅仅是使用预设。这时候需要了解如何通过代码直接设置相机的位置、视角方向等属性。引用[5]中提到了一些预设对应的实际角度,比如CameraPresetFront对应前视图,约45度向下。这可能意味着可以手动设置相机的方位角、仰角等参数。另外,引用[3]中的代码示例展示了如何通过activeCamera()获取当前相机对象,并调用setCameraPreset方法。此外,可能还有其他方法,比如直接设置相机的位置、目标点和上方向向量,或者调整旋转角度。比如,使用setXRotation、setYRotation等方法,或者调整相机的投影类型(正交或透视)。需要注意的是,三维曲面图绘制使用的是Q3DSurface和QSurface3DSeries,这些在引用[2]中提到过。不过视角调整主要与Q3DScene和Q3DCamera相关,所以应该从scene对象入手,获取activeCamera,然后进行操作。 用户可能需要具体的步骤,比如如何通过代码设置预设视角,或者如何动态调整视角。此外,可能还需要考虑性能问题,比如在调整视角时是否需要重新渲染整个场景,或者如何优化渲染效果。 另外,引用[5]还提到了颜色样式,但用户的问题是关于视角的,所以这部分可能暂时不需要涉及。但需要确保在调整视角时不影响颜色样式的设置。总结一下,改变视角的方法主要有两种:使用预设的CameraPreset枚举值,或者手动调整相机的参数。需要提供这两种方法的代码示例,并解释每个参数的作用。同时,可能需要提醒用户注意相机的投影类型、宽高比设置(如引用[1]中的setAspectRatio)是否会影响视角的显示效果。 最后,生成相关问题,比如如何自定义视角、如何动态旋转视角,或者视角设置的最佳实践,这些都能帮助用户进一步探索。</think>在使用QtDataVisualization绘制三维曲面图时,可通过以下方式改变视角和相机角度: ### 一、使用预设视角 Qt内置了20+种预设视角枚举值$Q3DCamera::CameraPreset$,例如: - $CameraPresetFront$:前视图(45°俯视) - $CameraPresetIsometricRight$:右轴测视图 - $CameraPresetDirectlyAbove$:垂直俯视 实现步骤: ```cpp // 获取场景中的相机对象 Q3DScene *scene = graph3D->scene(); Q3DCamera *camera = scene->activeCamera(); // 设置预设视角 camera->setCameraPreset(Q3DCamera::CameraPresetFrontHigh); ``` ### 二、手动调整相机参数 通过设置以下属性实现精细控制: 1. **方位角**:$setXRotation(float degrees)$ 2. **仰角**:$setYRotation(float degrees)$ 3. **缩放级别**:$setZoomLevel(float level)$ 4. **目标点**:$setTarget(QVector3D position)$ 5. **相机位置**:$setCameraPosition(float x, float y, float z)$ 示例代码: ```cpp // 设置相机以30°仰角观察曲面 camera->setCameraPosition(0, 30, 100); // (x,y,z)坐标 camera->setTarget(QVector3D(0, 0, 0)); // 聚焦原点 camera->setXRotation(45); // 水平旋转45° ``` ### 三、UI交互控制 引用[3]中的下拉列表实现方式: ```cpp void MainWindow::on_comboCamera_currentIndexChanged(int index) { Q3DCamera::CameraPreset preset = static_cast<Q3DCamera::CameraPreset>(index); graph3D->scene()->activeCamera()->setCameraPreset(preset); } ``` ### 四、重要注意事项 1. **宽高比控制**:需调用$setAspectRatio(Qt::AspectRatioMode)$保持比例,避免变形[^1] 2. **最低平面限制**:所有元素不能低于Y轴最低平面[^5] 3. **投影模式**:可通过$setProjectionType(Q3DCamera::ProjectionPerspective)$切换透视/正交投影 $$ \begin{cases} \text{透视投影} & \text{模拟人眼观察效果} \\ \text{正交投影} & \text{保持平行线关系} \end{cases} $$
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Color Space

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值