zoukankan      html  css  js  c++  java
  • Qt Q3DScatter中元素的移动和旋转

    程序运行截图如下:

    这里的主要框架为Q3DScatter

    首先是设置范围,免得随机生成坐标时,坐标系不停的变:

    使用QScatter3DSeries生成一串的item。方便显示在m_graph中

    使用QScatterDataItem进行元素的操作。

    逻辑很简单把

    旋转

    关键代码

      1 #include "widget.h"
      2 #include "ui_widget.h"
      3 #include <QtDataVisualization/QScatter3DSeries>
      4 #include <QDebug>
      5 #include <QThread>
      6 #include <QTime>
      7 #include <QTimer>
      8 #include <QMessageBox>
      9  
     10  
     11 Widget::Widget(QWidget *parent) :
     12     QWidget(parent),
     13     ui(new Ui::Widget)
     14 {
     15     ui->setupUi(this);
     16     this->setWindowTitle("CSDN IT1995");
     17     m_graph = new Q3DScatter();
     18     m_graph->axisX()->setRange(-10, 10);
     19     m_graph->axisY()->setRange(-10, 10);
     20     m_graph->axisZ()->setRange(-10, 10);
     21     QWidget *container = QWidget::createWindowContainer(m_graph);
     22  
     23     qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
     24  
     25     if (!m_graph->hasContext()) {
     26  
     27         QMessageBox msgBox;
     28         msgBox.setText("Couldn't initialize the OpenGL context.");
     29         msgBox.exec();
     30         return;
     31     }
     32  
     33  
     34  
     35     //添加数据
     36     QScatter3DSeries *item = new QScatter3DSeries();
     37     item->setMesh(QAbstract3DSeries::MeshUserDefined);
     38     item->setUserDefinedMesh(":/img/1cube.obj");
     39  
     40     m_graph->addSeries(item);
     41  
     42  
     43     //设置到控件上
     44     QHBoxLayout *hLayout = new QHBoxLayout();
     45     hLayout->addWidget(container, 1);
     46     ui->widget->setLayout(hLayout);
     47  
     48     //生成线,数据:
     49     QScatterDataArray *dataArray = new QScatterDataArray;
     50     dataArray->resize(5);
     51     QScatterDataItem *ptrToDataArray = &dataArray->first();
     52  
     53     for(int i = 0; i <= dataArray->size(); i++){
     54  
     55         ptrToDataArray->setPosition(QVector3D(0, i, 0));
     56         ptrToDataArray++;
     57     }
     58  
     59     item->dataProxy()->resetArray(dataArray);
     60  
     61     //让其随机移动
     62     m_timer = new QTimer(this);
     63     connect(m_timer, &QTimer::timeout, [=](){
     64  
     65         QScatterDataItem *ptr = &dataArray->first();
     66  
     67         for(int i = 0; i < dataArray->size(); i++){
     68  
     69             ptr->setPosition(QVector3D(qrand()%8 > 4 ? qrand()%8 : -qrand()%8, 
     70                                        qrand()%8 > 4 ? qrand()%8 : -qrand()%8, 
     71                                        qrand()%8 > 4 ? qrand()%8 : -qrand()%8));
     72             ptr++;
     73         }
     74         item->dataProxy()->resetArray(dataArray);
     75     });
     76     m_timer->start(2000);
     77  
     78     //让其自身旋转
     79     m_rotationTimer = new QTimer(this);
     80     connect(m_rotationTimer, &QTimer::timeout, [=]() mutable{
     81  
     82         QScatterDataItem *ptr = &dataArray->first();
     83  
     84         for(int i = 0; i < dataArray->size(); i++){
     85  
     86             QQuaternion ruaternion = QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 0.0f, 1.0f), 
     87                                                                    qrand()%600);
     88             ptr->setRotation(ruaternion);
     89             ptr++;
     90         }
     91         item->dataProxy()->resetArray(dataArray);
     92     });
     93     m_rotationTimer->start(100);
     94 }
     95  
     96 Widget::~Widget()
     97 {
     98     qDebug() << "Widget::~Widget()";
     99     delete m_graph;
    100     delete ui;
    101 }
  • 相关阅读:
    SVN 怎么让文件脱离 版本控制
    WEB开发中使用和理解 .net中的认证与授权
    三层,师姐把我点透了
    三层与养猪,加入自己的理解。
    Asp.net的登录验证方法Web.config访问权限配置
    <%=%> 引发的aspx文件、.aspx.cs文件和.aspx.designer.cs的一些说明
    bin。obj Properties文件夹
    JS得到对应字段 的值。遍历
    C#中页面传值的方法。转载
    $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13396250.html
Copyright © 2011-2022 走看看