这个实例展示了在图中添加自定义item。并且演示了如何去移动。

Obj网格文件添加到资源文件中。

注意:一般是在meshes上增加纹理,这里可以直接用QImage添加一个单独的颜色。

QImage color = QImage(2, 2, QImage::Format_RGB32);
color.fill(Qt::red);

通过QVector3D这个变量去设置这个位置

QVector3D positionOne = QVector3D(39.0f, 77.0f, 19.2f);

通过QCustom3DItem创建网格。

QCustom3DItem *item = new QCustom3DItem(":/items/oilrig.obj", positionOne,QVector3D(0.025f, 0.025f, 0.025f),QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 45.0f),color);

在graph中添加这个item

m_graph->addCustomItem(item);

使用removeCustomItemAt()移除某个位置的item

m_graph->removeCustomItemAt(positionOne);

这里要注意:移除了会会自动调用delete,如果不想释放想让其保留,可以使用releaseCustomItem()

下面对程序进行部分解析:

这里在pri文件中可以看到,使用了Qml和quick。

而在我们自己写的代码中没有使用到Qml和quick。如果去掉,程序不会发现编译问题,但运行会有问题。个人觉得是Qt里面3D相关的,使用了qml。会调用GPU来构建画面。

Q3DSurface:提供渲染3D平面图的方法。

下面是如果构造一个小型Q3DSurface图:

第一步把graph设置为最顶层window图

Q3DSurface surface;
surface.setFlags(surface.flags() ^ Qt::FramelessWindowHint);

这样就可以接收数据并渲染了,下面是创建几个item

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数据

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

最后是展示:

surface.show();

完整代码如下:

#include <QtDataVisualization>using namespace QtDataVisualization;int main(int argc, char **argv)
{QGuiApplication app(argc, argv);Q3DSurface surface;surface.setFlags(surface.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;QSurface3DSeries *series = new QSurface3DSeries;series->dataProxy()->resetArray(data);surface.addSeries(series);surface.show();return app.exec();
}

Qt文档阅读笔记-Custom Items Example解析相关推荐

  1. Qt文档阅读笔记-Broadcast Sender Example解析

    此例子展示了使用Qt Network API发送广播包 程序结构如下: 代码如下: sender.h #ifndef SENDER_H #define SENDER_H#include <QWi ...

  2. Qt文档阅读笔记-Broadcast Receiver Example解析

    这篇博文的例子是说明如何在局域网上搭建广播包接收端. 这里使用了Qt Network API,搭建本地广播包接收端. 结构如下: 代码如下: receiver.h #ifndef RECEIVER_H ...

  3. Qt文档阅读笔记-Object Model初步解析

    对象模型 标准C++对象模型提供了对象范式在运行时的高效性.但是他的一些静态性质在某些领域是不灵活的.在GUI程序中不仅要运行时的高效还需要较高的灵活性.Qt对象模型不急结合了C++运行时的高效并且还 ...

  4. Qt文档阅读笔记-GridLayout QML Type解析与实例

    目录 基本概念 代码与实例 基本概念 如果QGridLaout大小被调整,所有item的布局都将会重新排列.和widget的QGridLayout一样.如果想要一行或一列的布局可以使用RowLayou ...

  5. Qt文档阅读笔记-Image QML官方解析与实例

    目录 官方解析 博主例子 官方解析 Image Image用于展示图片. 使用source属性可以使用URL指定一张图片. 只要是Qt能打开的图片都支持,如果要展示动态图,要使用:BnimatedSp ...

  6. Qt文档阅读笔记-Widgets Tutorial官方解析及实例

    目录 官方解析 博主栗子 官方解析 QWiget通常作为其他窗口的容器,可以使用QWidget到达最小代价定义自定义控件(经验:通常可以采用子类QLabel做成自定义控件) 可以通过构建他的父类对象来 ...

  7. Qt文档阅读笔记-easingCurve:QEasingCurve官方解析及实例

    目录 官方解析 博主例子 官方解析 easingCurve:QEasingCurve 这个属性保留了动画的缓和曲线. 他定义了缓和取消,默认情况下,使用线性缓和曲线,产生线性插入值.下面举出其他曲线的 ...

  8. Qt文档阅读笔记-编写应用脚本解析与实例

    目录 官方解析 博主例子 官方解析 编写应用脚本 Qt提供了JavaScript脚本对应用程序的支持.下面将全方位说明JavaScript在Qt中的应用. Scripting Classes 如下的类 ...

  9. Qt文档阅读笔记-Object Trees Ownership解析与实例(为何某些程序在被关闭的时候会崩溃)

    目录 官方解析 Construction/Destruction Order of QObjects 博主栗子 继承里面构造函数与析构函数的顺序 在Qt中,object trees里面的创建与析构 [ ...

最新文章

  1. 融云发送图片消息_发送消息
  2. h2 迁移到 mysql_[saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库
  3. Linux内核链表深度分析【转】
  4. 转载: 快速理解Docker - 容器级虚拟化解决方案
  5. 腾讯在线教育小程序开发实践之路
  6. windows命令提示符_如何个性化Windows命令提示符
  7. ReverseFind
  8. html段落前的空格,HTML空格:空格前后
  9. FairScheduler的任务调度机制——assignTasks
  10. Android 音视频深入 十九 使用ijkplayer做个视频播放器(附源码下载)
  11. hdu1536 S-Nim(博弈)
  12. 使用 docker 来安装 oracle 11c
  13. Ubuntu 19.04 缺少libpng12.so.0
  14. 《Java性能优化权威指南》读书笔记
  15. Web前端基础学习——HTML5基础
  16. 十大经典排序算法(冒泡、选择、插入、希尔、快排..........)
  17. 软考中级-数据库系统工程师复习知识点汇总
  18. OpenBmc开发13:添加传感器(fan)
  19. java scriptrunner,java使用ScriptRunner执行sql文件
  20. 【NodeJs-5天学习】第四天存储篇④ ——基于MQTT的环境温度检测,升级存储为mysql

热门文章

  1. RAC_Oracle集群服务安装Grid Infrastructure(案例)
  2. Haproxy 实现Apache的负载均衡
  3. linux ls -l 详解
  4. SMTP连接器的使用
  5. 程序员平均月薪过万,想当程序员的话,大学学那些专业会更好呢?
  6. @程序员,当你准备选择“这条路”,那么恭喜你,你的钱包可能要鼓了!
  7. 看看我写的文章,牛逼不。哈哈。
  8. 飞秋 一个程序员的老作品。
  9. C程序设计基础之多维数组的指针变量
  10. 同样是面试简历,为何你如此风骚!