【QT6】【QChart】绘图时曲线显示不全

1 篇文章 0 订阅

在用QChart来绘制自动化曲线QSplineSeries时,总是发现曲线显示不全。显示如下:

在网上搜索一番,后发现有朋友建议加上QMargins,结果还是不行。

 代码如下:

    QSplineSeries *series = new QSplineSeries();
    series ->setVisible(true);
    *series << QPointF(0.0, 0.0) << QPointF(30, 130) <<  QPointF(255, 255);
 
    QChart *chart = new QChart();
    chart->addSeries(series);

    QMargins q;
    q.setBottom(3);
    chart->setMargins(q);

    chart->createDefaultAxes();
    // chart->axes(Qt::Horizontal).back()->setRange(-10, 255);

    QChartView *chartView = new QChartView(chart);
    chartView->resize(500, 500);
    chartView->show();

解释一下代码:

QSplineSeries是可以自动化绘制曲线的点序列,往里面添加了三个点(0,0)、(30,130)、(255,255)曲线是一个向上凸出的弧线。调用QChart的addSeries将序列加到QChart中,然后再基于QChart创建一个QChartView,就可以用show函数将曲线显示出来。

其中setMargins是给QChart添加三个边缘间隙,createDefaultAxes是创建默认的坐标轴,因为QSplineSeries是继承于QXYSeries,所以这里创建的是QValueAxis类型坐标轴。

代码解释完毕。

解释原因:

这里坐标轴默认是从0开始,到曲线的最大值255,将横坐标改为从-10开始:

chart->axes(Qt::Horizontal).back()->setRange(-10, 255);

于是曲线完整的显示出来了:

这里是QSplineSeries绘制曲线的时候,曲线的一些点有负数了,导致默认坐标系显示不出来。

有朋友会问如果不加默认坐标轴会不会正常呢,试了一下也不会:

 QSplineSeries是自动根据几个点绘制曲线,要研究下这些曲线的点是怎么计算出来的,是不是可以给一个范围限制不能包含负数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在进行QT串口数据动态曲线显示,我们首先要借助QT串口通信模块获取来自串口设备的数据。在此基础上,我们需要创建一个QT图形界面程序,来实现曲线的动态显示。 具体而言,我们可以通过QT中的QCustomPlot等图形库来实现动态曲线显示,在动态显示曲线的同,我们也需要处理来自串口设备的数据流,将其转化为相应的曲线显示。 在实现QT串口数据动态曲线显示过程中,我们还需要考虑诸如数据采集、数据存储和数据处理等问题,以使得此程序更加稳定和实用。 总之,在QT串口数据动态曲线显示中,需要借助QT串口通信模块和相应的图形显示库,同需要加强对数据采集和处理等问题的考虑,来实现高质量的动态曲线显示功能。 ### 回答2: Qt是一种流行的跨平台GUI开发框架,它提供了许多用于数据可视化的工具。在这篇文章中,我们将讨论如何使用Qt来实现串口数据的动态曲线显示。 首先,我们需要使用Qt的串口类来打开串口。通过指定串口的名称、波特率、数据位数、校验位和停止位等参数,我们可以创建一个可以读取或写入串口数据的对象。 一旦这个串口对象被创建,我们就可以通过Qt的信号槽机制来处理接收到的串口数据。我们可以连接一个槽函数到读取串口数据的信号上,每当串口收到数据,该槽函数就会自动被调用,并将串口数据存储到一个缓冲区中。 接下来,我们需要使用Qt绘图类来将串口数据转换成一条曲线。通过创建一个QPainter对象,我们可以在一个QWidget窗口上实现实数据曲线的动态显示。我们可以使用QPainter的制函数,如drawLine、drawPoint或drawPath,来把每个新的数据点添加到曲线中。 最后,我们需要使用Qt的定器类来控制实数据曲线的更新速率。通过使用QTimer类的start和stop函数,我们可以启动和停止一个定器对象,以定期调用更新显示函数,这样就可以实现实数据曲线的动态显示。 综上所述,使用Qt实现串口数据的动态曲线显示并不复杂。我们只需要利用Qt的串口、信号槽、绘图和定器等类,就可以轻松地实现一个可靠的功能强大的实数据曲线显示系统。 ### 回答3: 在Qt中进行串口数据的动态曲线显示,可以利用Qt Charts模块以及Qt SerialPort模块。首先需要打开串口,读取串口数据并解析,将解析后的数据作为动态曲线的横纵坐标,并将数据实显示曲线上。 具体步骤如下: 1. 引入Qt Charts和Qt SerialPort模块,包括头文件和库文件。 2. 在UI界面中添加一个动态曲线控件,设置相关属性,如横纵坐标范围、坐标轴标签等。 3. 打开串口,设置串口参数,如波特率、数据位、停止位等。 4. 读取串口数据,使用Qt的QSerialPort类中的read()函数读取数据,读取后进行解析。 5. 将解析后的数据作为动态曲线的横纵坐标,使用Qt Charts中的QChart类和QLineSeries类,将坐标点添加到曲线中,并通过曲线的update()函数进行实更新。 6. 将实更新的曲线显示在UI界面中,使用Qt的QChartView类将曲线添加到UI中的曲线控件中。 7. 完成后需要在程序中添加相应的错误处理和异常处理代码。当串口连接错误或数据解析错误,应该及给出提示信息。 以上是Qt串口数据动态曲线显示的基本步骤,根据实际需求可以进行一些扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值