Qt & QWT:QwtPlotCurve - 曲线未显示

Posted

技术标签:

【中文标题】Qt & QWT:QwtPlotCurve - 曲线未显示【英文标题】:Qt & QWT: QwtPlotCurve - Curve not showing up 【发布时间】:2013-12-09 13:43:54 【问题描述】:

我想使用 QWT 和 Qt Creator 显示一个简单的图表:

Qt 版本:4.8.2,Qt Creator:2.5.2,QWT 版本:6.0.0

我在我的 MainWindow 中添加了一个 QwtPlot(在示例中称为“myPlot”)。然后我有一个回调函数,每次按下按钮时都会调用它:

void MainWindow::forwardPlot()

    double x[9] = 1,20,30,40,50,60,70,200,500;
    double y[9] = 1,500,3,1,200,100,2,1,0;
    QwtPlotCurve *curve = new QwtPlotCurve();
    curve->setRawSamples(x,y,9);
    curve->attach( ui->myPlot );
    curve->show();
    ui->myPlot->replot();
    ui->label->setText("bla");

编译工作正常... 标签设置为“bla”,所以我知道调用了回调函数。但不显示曲线。例如,我可以调整 myPlot 的大小。但是显示曲线不起作用。有什么提示吗?

【问题讨论】:

ui->myPlot 以前是否可见?如果添加 ui->myPlot->show() 会发生什么 不,我已经试过了。没有帮助:-( 【参考方案1】:

您的点数组在堆栈上,离开 forwardPlot() 后将消失。

【讨论】:

【参考方案2】:

    您似乎没有为曲线设置笔颜色:

    curve->setPen(QColor(Qt::green));

    您需要设置轴,以便 Qwt 知道要显示绘图的哪一部分:

    ui->myPlot->setAxisScale(QwtPlot::xBottom, 1.0, 500.0);

    ui->myPlot->setAxisScale(QwtPlot::yLeft, 1.0, 500.0);

    我还会设置曲线的标题,看看你的 QwtPlot 是否有效:

    ui->myPlot->setTitle("绘图标题");

编辑:我已经重现了这个问题。 setRawSamples 要求您传递的数据缓冲区在绘图的生命周期内有效。在您的情况下,您将通过 forwardPlot() ends

时无效的本地缓冲区

改为在堆中分配缓冲区。

【讨论】:

从上面的提示中,只有第 3 部分(绘制标题)有效......仍然不明白问题所在。 “作品”是指您可以在情节小部件上看到标题,但看不到情节本身?看到轴了吗?请考虑发布可重现问题的可编译示例或将项目上传到某处,因为问题可能在其他地方(如 UI 文件)。 好的,我会尽快提供一个例子。我之前在评论中的意思是,我可以看到标题。我还可以看到绘图区域、轴,我可以更改绘图轴的颜色。但我不能改变两个轴的比例(你的答案是两个)。而且,最重要的是,曲线没有出现...感谢您的评论! 看上面的编辑,看来这是问题的根源。

以上是关于Qt & QWT:QwtPlotCurve - 曲线未显示的主要内容,如果未能解决你的问题,请参考以下文章

使用 QwtPlotCurve 断开第一个和最后一个点

Qwt 仅重新绘制特定区域

Qwt:带填充的曲线

qwt 绘图曲线轴不可见

qt示波器示例采样线程类在项目中是如何工作的?

动态创建多个 QwtPlotCurve