При создании пользовательского графика на основе инфраструктуры Qt Datavisualization я пришел к следующему:
На MacBook Pro в середине 2015 года требуется более 90% процессорного времени. Можно ли сделать это быстрее? Или это то, чего я должен ожидать.
Я пробовал graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
и graph->activeTheme()->setBackgroundEnabled(false);
, похоже, он не работает быстрее.
mainwidget.h
#include <QWidget>
#include <QVBoxLayout>
#include <Q3DBars>
#include <QTimer>
#include <QCustom3DItem>
#include <QImage>
#include <QVector>
using namespace QtDataVisualization;
class MainWidget : public QWidget
{
Q_OBJECT
QVBoxLayout vLayoutMain;
Q3DBars graph;
QTimer timer;
QVector<QCustom3DItem*> items;
QCustom3DItem* custom_item(float x, float z, float y=0);
public:
explicit MainWidget(QWidget *parent = nullptr);
void setScale();
};
mainwidget. cpp
#include "mainwidget.h"
const int MAX = 256;
MainWidget::MainWidget(QWidget *parent) : QWidget(parent)
{
setLayout(&vLayoutMain);
auto container = QWidget::createWindowContainer(&graph);
vLayoutMain.addWidget(container);
graph.scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricLeft);
graph.valueAxis()->setRange(0, MAX);
graph.columnAxis()->setRange(0, MAX);
graph.rowAxis()->setRange(0, MAX);
items.resize(MAX*MAX);
for (int col = 0; col < MAX; ++col)
for (int row = 0; row < MAX; ++row) {
items[col*MAX+row] = custom_item(row,col);
graph.addCustomItem(items[col*MAX+row]);
}
connect(&timer, &QTimer::timeout, this, &MainWidget::setScale);
timer.start(200);
}
void MainWidget::setScale()
{
static int i = 0;
int scale = 10*i++;
if (!(scale < MAX)) {scale = 0; i = 0;}
for (int c = 0; c < MAX; ++c)
for (int p = 0; p < MAX; ++p)
items[c*MAX+p]->setScaling(QVector3D(1,scale,1));
}
QCustom3DItem* MainWidget::custom_item(float x, float z, float y)
{
auto item = new QCustom3DItem;
item->setScalingAbsolute(false);
item->setMeshFile(QStringLiteral(":/mesh/plane.obj"));
item->setPosition(QVector3D(x,y,z));
QImage image{1, 1, QImage::Format_RGB32};
image.fill(Qt::red);
item->setTextureImage(image);
item->setVisible(true);
return item;
}
plane.ojb
# Blender v2.81 (sub 16) OBJ File: ''
# www.blender.org
o Plane
v -0.500000 0.000000 -0.000000
v 0.500000 0.000000 -0.000000
v -0.500000 2.000000 0.000000
v 0.500000 2.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 1.000000
vn 0.0000 -0.0000 1.0000
s off
f 2/1/1 3/2/1 1/3/1
f 2/1/1 4/4/1 3/2/1