Количество точек на графике 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);
}
Необходимо чтобы график полностью был отрисован (отсутствовали серые области).
Как конвертировать в C++ цвет c hex (std::wstring) к COLORREF?