日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt笔记-Q3DScatter中元素的移动和旋转

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt笔记-Q3DScatter中元素的移动和旋转 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

程序運行截圖如下:

這里的主要框架為Q3DScatter

首先是設(shè)置范圍,免得隨機生成坐標時,坐標系不停的變:

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

使用QScatterDataItem進行元素的操作。

邏輯很簡單把

旋轉(zhuǎn)

關(guān)鍵代碼

#include "widget.h" #include "ui_widget.h" #include <QtDataVisualization/QScatter3DSeries> #include <QDebug> #include <QThread> #include <QTime> #include <QTimer> #include <QMessageBox>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("CSDN IT1995");m_graph = new Q3DScatter();m_graph->axisX()->setRange(-10, 10);m_graph->axisY()->setRange(-10, 10);m_graph->axisZ()->setRange(-10, 10);QWidget *container = QWidget::createWindowContainer(m_graph);qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));if (!m_graph->hasContext()) {QMessageBox msgBox;msgBox.setText("Couldn't initialize the OpenGL context.");msgBox.exec();return;}//添加數(shù)據(jù)QScatter3DSeries *item = new QScatter3DSeries();item->setMesh(QAbstract3DSeries::MeshUserDefined);item->setUserDefinedMesh(":/img/1cube.obj");m_graph->addSeries(item);//設(shè)置到控件上QHBoxLayout *hLayout = new QHBoxLayout();hLayout->addWidget(container, 1);ui->widget->setLayout(hLayout);//生成線,數(shù)據(jù):QScatterDataArray *dataArray = new QScatterDataArray;dataArray->resize(5);QScatterDataItem *ptrToDataArray = &dataArray->first();for(int i = 0; i <= dataArray->size(); i++){ptrToDataArray->setPosition(QVector3D(0, i, 0));ptrToDataArray++;}item->dataProxy()->resetArray(dataArray);//讓其隨機移動m_timer = new QTimer(this);connect(m_timer, &QTimer::timeout, [=](){QScatterDataItem *ptr = &dataArray->first();for(int i = 0; i < dataArray->size(); i++){ptr->setPosition(QVector3D(qrand()%8 > 4 ? qrand()%8 : -qrand()%8, qrand()%8 > 4 ? qrand()%8 : -qrand()%8, qrand()%8 > 4 ? qrand()%8 : -qrand()%8));ptr++;}item->dataProxy()->resetArray(dataArray);});m_timer->start(2000);//讓其自身旋轉(zhuǎn)m_rotationTimer = new QTimer(this);connect(m_rotationTimer, &QTimer::timeout, [=]() mutable{QScatterDataItem *ptr = &dataArray->first();for(int i = 0; i < dataArray->size(); i++){QQuaternion ruaternion = QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 0.0f, 1.0f), qrand()%600);ptr->setRotation(ruaternion);ptr++;}item->dataProxy()->resetArray(dataArray);});m_rotationTimer->start(100); }Widget::~Widget() {qDebug() << "Widget::~Widget()";delete m_graph;delete ui; }

源碼打包下載地址:

https://github.com/fengfanchen/Qt/tree/master/3D%20move%20rotation

?

?

總結(jié)

以上是生活随笔為你收集整理的Qt笔记-Q3DScatter中元素的移动和旋转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。