|
解决了。
/* 初始化QwtPlot */
void MainWindow::InitPlot()
{
/* 坐标轴设置: X轴不可见,Y轴可见 */
ui->qwtPlot->enableAxis(QwtPlot::xBottom, true);
ui->qwtPlot->enableAxis(QwtPlot::yLeft , true);
/* 自动 */
ui->qwtPlot->setAxisAutoScale(QwtPlot::xBottom, true);
ui->qwtPlot->setAxisAutoScale(QwtPlot::yLeft, true);
curve = new QwtPlotCurve;
ui->qwtPlot->setAxisTitle(QwtPlot::yLeft, tr("电流值(/A)"));
ui->qwtPlot->setAxisScale(QwtPlot::yLeft, -0.1,1);
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 1 ), QSize( 4, 4 ) );
curve->setSymbol(symbol);
QwtPlotGrid *grid = new QwtPlotGrid;
grid->enableX(true);
grid->enableY(true);
grid->setMajorPen(QPen(Qt::black, 0, Qt:otLine));//大格子
grid->attach(ui->qwtPlot);
ui->qwtPlot->setCanvasBackground(QBrush( Qt::darkCyan ));
/* 曲线更光滑 */
curve->setCurveAttribute(QwtPlotCurve::Fitted, true);
}
void MainWindow::InitPlot_2()
{
/* 坐标轴设置: X轴不可见,Y轴可见 */
ui->qwtPlot_2->enableAxis(QwtPlot::xBottom, true);
ui->qwtPlot_2->enableAxis(QwtPlot::yLeft , true);
/* 自动 */
ui->qwtPlot_2->setAxisAutoScale(QwtPlot::xBottom, true);
ui->qwtPlot_2->setAxisAutoScale(QwtPlot::yLeft, true);
curve_2 = new QwtPlotCurve;
ui->qwtPlot_2->setAxisTitle(QwtPlot::yLeft, QObject::tr("电流值(/A)"));
ui->qwtPlot_2->setAxisScale(QwtPlot::yLeft, -0.1,1);
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 0.2 ), QSize( 2, 2 ) );
curve_2->setSymbol(symbol);
QwtPlotGrid *grid = new QwtPlotGrid;
grid->enableX(true);
grid->enableY(true);
grid->setMajorPen(QPen(Qt::black, 0, Qt:otLine));//大格子
grid->attach(ui->qwtPlot_2);
ui->qwtPlot_2->setCanvasBackground(QBrush( Qt::darkCyan ));
/* 曲线更光滑 */
curve_2->setCurveAttribute(QwtPlotCurve::Fitted, true);
}
/* 来了新数据,更新QwtPlot */
void MainWindow::UpPlot(qreal rValue)
{
ui->qwtPlot->setAxisAutoScale(QwtPlot::xBottom, true);
ui->qwtPlot->setAxisAutoScale(QwtPlot::yLeft, true);
//qDebug()<<"The new data:"<<rValue;
arX.append(rDataNo);
arY.append(rValue);
/* 如果超过了最大个数,只留最后的X_WIDTH个。
* 这样就保证了plot里面后续至可能显示X_WIDTH个数据
*/
if(arX.count() > X_WIDTH)
{
arX.removeAt(0);
arY.removeAt(0);
}
/* curve->setSamples(x, y, arY.count());这个函数的参数要求是指针,所以定义2个数组
* 原来用的QList<qreal>主要是方便remove掉不要的数据
*/
qreal x[arX.count()];
qreal y[arX.count()];
//qDebug()<<"Last count:"<< arY.count();
/* 将整理好的数据放进数组里面,C++书上不是说·数组,,指针之间有些啥关系·?自己看书就晓得了·。 */
for(qint32 i = 0 ; i < arY.count(); i++)
{
x[i] = arX.at(i);
y[i] = arY.at(i);
}
curve->setSamples(x, y, arY.count());
curve->attach(ui->qwtPlot);
ui->qwtPlot->replot();
/* Add */
rDataNo++;
}
void MainWindow::UpPlot_2(qreal rValue)
{
ui->qwtPlot_2->setAxisAutoScale(QwtPlot::xBottom, true);
ui->qwtPlot_2->setAxisAutoScale(QwtPlot::yLeft, true);
QTime t;
t.start();
//qDebug()<<"The new data:"<<rValue;
arX_2.append(rDataNo);
arY_2.append(rValue);
/* curve->setSamples(x, y, arY.count());这个函数的参数要求是指针,所以定义2个数组
* 原来用的QList<qreal>主要是方便remove掉不要的数据
*/
qreal x[arX_2.count()];
qreal y[arX_2.count()];
//qDebug()<<"Last count:"<< arY_2.count();
/* 将整理好的数据放进数组里面,C++书上不是说·数组,,指针之间有些啥关系·?自己看书就晓得了·。 */
for(qint32 i = 0 ; i < arY_2.count(); i++)
{
x[i] = arX_2.at(i);
y[i] = arY_2.at(i);
}
curve_2->setSamples(x, y, arY_2.count());
curve_2->attach(ui->qwtPlot_2);
ui->qwtPlot_2->replot();
/* Add */
rDataNo_2++;
//qDebug() << "looptime" << t.elapsed();
}
|
|