QWT的情节改善情节

时间:2014-12-31 07:06:02

标签: qt sqlite qwt

我有一个2D数据集X,Y和一个强度值(但缺少一些点)。数据存储在sqlite数据库中,每行包含X,Y和Z.每个情节我有大约1.5M行。 X范围约为4000pts宽,Y约为1800ts宽。因此,图中只有大约20%的点实际上具有指定值,其余的被初始化为最小值。更少的将是"可见"基于典型的颜色条比例范围(由用户指定)。

我正在使用QwtPlotSpectrogram(Qwt 6.1.2)来获得我想要的输出。执行SQL查询需要一段时间。那么这个情节需要很长时间。我正在寻找有关如何提高性能的建议,尤其是在绘图方面。

我附上了一段代码摘录,显示我从数据库中提取数据然后绘制图表。我做了一些修改,所以显示的代码更简洁,不会粘贴整个程序。希望它有意义。

QSqlQuery query(tsd_data);
int pl=plot_number, y_count=1800;
query.exec("SELECT max(x), min(x), max(z), min(z) FROM database.plot_data WHERE pl="+QString::number(pl));
query.next();
int max_x = query.value(0).toInt();
int min_x = query.value(1).toInt();
int max_z = query.value(2).toInt();
int min_z = query.value(3).toInt();
int x_count = max_x-min_x;
QVector<double> dr_data(x_count*(y_count+1),-200);

query.exec("SELECT y, x, z FROM database.plot_data WHERE pl="+QString::number(pl));
while (query.next())
{
    int y = query.value(0).toInt();
    int x = query.value(1).toInt();
    dr_data[y*x_count+(x-min_x)] = query.value(2).toDouble();
}

QwtMatrixRasterData *qwtm = new QwtMatrixRasterData();
qwtm->setInterval( Qt::XAxis, QwtInterval( min_x-zero, max_x-zero ) );
qwtm->setInterval( Qt::YAxis, QwtInterval( 0, 1800) );
qwtm->setInterval( Qt::ZAxis, QwtInterval( min_z, max_z ) );
qwtm->setValueMatrix(dr_data,bin_count);
QwtPlotSpectrogram *spec = new QwtPlotSpectrogram();
spec->setRenderThreadCount( 0 ); // use system specific thread count
spec->setCachePolicy( QwtPlotRasterItem::PaintCache );
QwtLinearColorMap *colormap = new QwtLinearColorMap(Qt::black, Qt::white);
colormap->addColorStop(0.1,Qt::blue);
colormap->addColorStop(.3,Qt::cyan);
colormap->addColorStop(.5,Qt::green);
colormap->addColorStop(.7,Qt::yellow);
colormap->addColorStop(.9,Qt::red);
spec->setColorMap(colormap);
spec->setData(qwtm);
spec->setDisplayMode( QwtPlotSpectrogram::ImageMode, true );
ui->dr_plot->setEnabled(true);
ui->dr_scale->setEnabled(true);
ui->dr_scale->setColorBarEnabled(true);
ui->dr_scale->setColorBarWidth(40);
QwtInterval zInterval = spec->data()->interval(Qt::ZAxis);
ui->dr_scale->setColorMap(zInterval,colormap);
spec->attach(ui->dr_plot);
ui->dr_plot->replot();

1 个答案:

答案 0 :(得分:0)

从SVN中继获取Qwt版本并在qwt_plot_spectrogram.cpp中启用DEBUG_RENDER。

在我的盒子(i5 quadcore)上运行光谱图示例时,我看到~25ms的图像合成为1812x1078像素。在运行应用程序时,您在包装箱上看到的号码是多少?您看到了多少号码?