找回密码
 立即注册
收起左侧

请问如何将从仪器读取的数据在UI界面上实时的以曲线形式...

7
回复
8200
查看
[复制链接]
累计签到:14 天
连续签到:1 天
来源: 2016-2-20 19:55:53 显示全部楼层 |阅读模式
1Qter豆
正在做一个项目
具体是从电源里面不断的读取电流值,然后将电流值实时的以动态曲线的方式显示出来。

我现在还需要将数据绘制成曲线动态的显示出来,请问该用什么办法?

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-2-20 20:05:22 显示全部楼层
新开一个线程,然后用Qpainter画图,,具体说的话太多了,你看下资料就行了,QT画图的很多
注意下QpaintEven() 和 update()  这两个函数就行了,基本也就用这两个函数画图

点评

如果曲线复杂的话,还是上clustomplot 或者qwt好点。  详情 回复 发表于 2016-2-22 09:17
回复

使用道具 举报

累计签到:14 天
连续签到:1 天
2016-2-21 11:38:02 显示全部楼层
请问你有具体的例子吗?
回复

使用道具 举报

累计签到:595 天
连续签到:1 天
2016-2-22 09:17:01 显示全部楼层
qq1043068972 发表于 2016-2-20 20:05
新开一个线程,然后用Qpainter画图,,具体说的话太多了,你看下资料就行了,QT画图的很多
注意下QpaintEve ...

如果曲线复杂的话,还是上clustomplot 或者qwt好点。
回复

使用道具 举报

累计签到:14 天
连续签到:1 天
2016-2-22 09:35:49 显示全部楼层
请问您使用过qwt或者是clustomplot吗?我昨天在网上查到了这样的方法,qwt没有安装成功,
回复

使用道具 举报

累计签到:11 天
连续签到:1 天
2016-3-9 17:34:46 显示全部楼层
malouqizu 发表于 2016-2-22 09:35
请问您使用过qwt或者是clustomplot吗?我昨天在网上查到了这样的方法,qwt没有安装成功, ...

你解决了这个问题么?我也想知道怎么弄
回复

使用道具 举报

累计签到:14 天
连续签到:1 天
2016-3-12 11:34:43 显示全部楼层
解决了。
/* 初始化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();
}










回复

使用道具 举报

累计签到:139 天
连续签到:1 天
2016-5-27 08:17:51 显示全部楼层
学习一下,正在做动态曲线绘制,但是只能读出数据,却不能显示,希望能借鉴大神的思路。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了