Увеличить дальность прорисовки q3dsurface

171
03 марта 2019, 11:20

Количество точек на графике 100000. Для вывода графика пользовался примером:Surface example.

main.cpp

#include <iostream>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow window;
    QVector<double*> data;
    double tstep = 0.06, xstep = 0.01;
    data.reserve(1000 * 100);
    for (int t = 0; t < 1000; ++t)
    {
        for (int x = 0; x < 100; ++x)
        {
            data.push_back(new double[3]{static_cast<double>(x) * xstep , std::sin(t * tstep * (x * xstep) * (x * xstep)),  static_cast<double>(t) * tstep});
        }
    }
    window.dataReceived(data);
    window.show();
    return a.exec();
}

window.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QApplication>
#include <QVector>
#include "userinterface.h"
class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QHBoxLayout * layout;
    QWidget * centralWidget, * container;
    Q3DSurface * graph;
public:
    MainWindow(QWidget * parent = nullptr);
    UserInterface * ui;
public slots:
    void dataReceived(QVector<double*> dots);
};
#endif

window.cpp

#include <QHBoxLayout>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget * parent)
    : QMainWindow(parent) , 
    ui(new UserInterface)
{
    graph = new Q3DSurface();
    graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
    container = QWidget::createWindowContainer(graph);
    MainWindow->setCentralWidget(container);
}
void MainWindow::dataReceived(QVector<double*> dots)
{
    QSurfaceDataProxy * proxy = new QSurfaceDataProxy();
    QSurface3DSeries * series = new QSurface3DSeries(proxy);
    QSurfaceDataArray *dataArray = new QSurfaceDataArray;
    int xSize = 100;
    dataArray->reserve(1000);
    for (int t = 0; t < 1000; ++t)
    {
        QSurfaceDataRow * newRow = new QSurfaceDataRow(xSize);
        for (int x = 0; x < xSize; ++x)
        {
            double *  curr = dots[t * xSize + x];
            (*newRow)[x].setPosition(QVector3D(curr[0], curr[1], curr[2]));
        }
        *dataArray << newRow;
    }
    proxy->resetArray(dataArray);
    ui->graph->addSeries(series);
    gr.setColorAt(0.0, Qt::black);
    gr.setColorAt(0.33, Qt::blue);
    gr.setColorAt(0.67, Qt::red);
    gr.setColorAt(1.0, Qt::yellow);
    ui->graph->seriesList().at(0)->setBaseGradient(gr);
    ui->graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
}

Необходимо чтобы график полностью был отрисован (отсутствовали серые области).

READ ALSO
E2141 Declaration syntax error в cbuilder

E2141 Declaration syntax error в cbuilder

У меня есть следующий код:

156
C++ Конвертировать цвет c hex (std::wstring) к COLORREF

C++ Конвертировать цвет c hex (std::wstring) к COLORREF

Как конвертировать в C++ цвет c hex (std::wstring) к COLORREF?

178
Объявление массива

Объявление массива

Почему я могу объявить a, но не могу b?

170
Дефолтные параметры и полиморфизм

Дефолтные параметры и полиморфизм

Почему выводит A A, а не A B?

161