此实例主要是QCustom3DLabel的基本使用,以及Q3DSurface发射信号与C++后端的交互工作。

QCustom3DLabel:这个自定义的label类可以设置文本,字体,位置,放缩,旋转,颜色。看得见的边框和背景是可以被触发的。这里颜色、边框、背景有默认值,这个默认值是根据主题会变的(估计是windows或者Linux,或者各个系统的不同版本)

selectedElementChanged这个信号是Q3DSurface从QAbstract3DGraph父类继承下来的。当界面有Item被选中的时候会被触发。

程序运行截图如下!

当点击X,Y,Z轴坐标的时候,LineEdit会被设置。

当点击那个Label时,会对Label进行动态放缩。

当在LineEdit中输入文本时,按下pushbutton,会对Label的数据进行设置

关键代码如下:

#include "widget.h"
#include "ui_widget.h"
#include <QtDataVisualization>
#include <QCustom3DLabel>
#include <QList>
#include <QPropertyAnimation>
#include <QFont>
#include <QVector3D>
#include <QDebug>using namespace QtDataVisualization;Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);m_surface = new Q3DSurface;this->setWindowTitle("CSDN IT1995");createLabel("Hello World");m_selectionAnimation = new QPropertyAnimation(this);m_selectionAnimation->setPropertyName("scaling");m_selectionAnimation->setDuration(500);m_selectionAnimation->setLoopCount(-1);QWidget *w = QWidget::createWindowContainer(m_surface);QHBoxLayout *lay = new QHBoxLayout;lay->addWidget(w);ui->widget->setLayout(lay);connect(m_surface, &QAbstract3DGraph::selectedElementChanged, this, &Widget::handleElementSelected);connect(ui->pushButton, &QPushButton::clicked, [=](){m_surface->removeCustomItem(m_label);createLabel(ui->lineEdit->text());});
}Widget::~Widget()
{delete m_surface;delete ui;
}void Widget::handleElementSelected(int type)
{if(type == QAbstract3DGraph::ElementCustomItem){QCustom3DItem *item = m_surface->selectedCustomItem();QCustom3DLabel *p = qobject_cast<QCustom3DLabel *>(item);if(p != nullptr){ui->lineEdit->setText(p->text());m_selectionAnimation->setTargetObject(item);m_selectionAnimation->setStartValue(item->scaling());m_selectionAnimation->setEndValue(item->scaling() * 1.5f);m_selectionAnimation->start();}}else if(type == QAbstract3DGraph::ElementSeries){}else if(type == QAbstract3DGraph::ElementAxisXLabel){ui->lineEdit->setText("X Label clicked");}else if(type == QAbstract3DGraph::ElementAxisYLabel){ui->lineEdit->setText("Y Label clicked");}else if(type == QAbstract3DGraph::ElementAxisZLabel){ui->lineEdit->setText("Z Label clicked");}
}void Widget::createLabel(const QString text)
{QFont titleFont = QFont("Century Gothic", 30);titleFont.setBold(true);m_label = new QCustom3DLabel(text, titleFont, QVector3D(0.0f, 1.2f, 0.0f), QVector3D(1.0f, 1.0f, 0.0f), QQuaternion());m_label->setPositionAbsolute(true);m_label->setFacingCamera(true);m_label->setBackgroundColor(QColor(0x66cdaa));m_surface->addCustomItem(m_label);
}

源码下载地址如下:

https://github.com/fengfanchen/Qt/tree/master/Qt3DLabel

Qt文档阅读笔记-QCustom3DLabel使用及Q3DSurface基本信号相关推荐

  1. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  2. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  3. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  4. Qt文档阅读笔记-QWebEngineView及QML WebEngineView

    这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...

  5. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

  6. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

  7. Qt文档阅读笔记-对Style Plugin Example实例的解析

    目录 前言 Style Plugin Example SimpleStylePlugin Class 定义 SimpleStylePlugin Class 实现 main()函数 The Simple ...

  8. Qt文档阅读笔记-QSet官方解析及实例

    目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...

  9. Qt文档阅读笔记-QML Canvas的官方解析及实例

    目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...

  10. Qt文档阅读笔记-Q_ASSERT的另外一总用法(大佬用法)

    刚刚看到文档里面有个Q_ASSERT,好玩的用法! 普通人的用法如下: #include <QApplication> #include <QGraphicsLineItem> ...

最新文章

  1. oracle怎么查询成绩学号,oracle学习(简单查询)
  2. 重用生成的JAXB类
  3. jquery ready方法实现原理
  4. 创建物化视图commit_oracle慎用基于on commit刷新物化视图的方式(一)
  5. android系统(107)---Android路由表设置(route amp; DNS)
  6. MSSQL - SQL Server2008附加数据库失败 错误号:5120
  7. nginx 接收报文_Nginx代理缓存功能
  8. ubuntu 的问题,我一个人使用,却显示两人登录?
  9. (转载)排序六 堆排序
  10. 解决JavaScript浮点数(小数) 运算出现Bug的方法
  11. Maker工作室_激光雕刻机使用方法
  12. js读取excel文件
  13. JAVA学习DAY3 - 循环 输出平行四边形,等腰三角形,菱形
  14. 什么是模块化,模块化的好处是
  15. 小呆学数据分析——用duplicated/drop_duplicates方法进行重复项处理
  16. 关于“TCP segment of a reassembled PDU”
  17. 计算机二级MS考试题目占分数
  18. Roberts边缘检测算子
  19. 什么是企业防火墙,什么是策略?
  20. 您必须应用的#1规则永远不会在Twitter或Facebook上被骗

热门文章

  1. snmpwalk 获取端口流量_通过snmpwalk命令计算接口速率
  2. Java校园语音通信软件开发
  3. QQ音乐MV/腾讯视频下载教程
  4. 使用AMOS图形建立和检测模型(3)
  5. 点分十进制IP转换为32位二进制IP,带合法性校验
  6. docx4j linux上文件内容乱码问题
  7. PHP开发环境准备,PHPWAMP使用,图文教程
  8. Google Chrome(谷歌浏览器)安装使用
  9. 中国移动Cmpp java实现_CMPP-java 中国移动CMPP协议java开发包 - 下载 - 搜珍网
  10. SpringBoot 拦截器和过滤器区别及应用