【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
    评论
QChart是Qt框架中的一个类,用于制各种类型的图表,包括曲线面积图。下面是一个简单的示例代码: ```cpp // 创建QChart对象 QChart *chart = new QChart(); // 创建一个曲线面积图序列 QLineSeries *series = new QLineSeries(); series->setName("Area Chart"); // 添加数据点 *series << QPointF(0, 1) << QPointF(1, 3) << QPointF(2, 2) << QPointF(3, 4) << QPointF(4, 3) << QPointF(5, 5); // 创建曲线面积图 QAreaSeries *areaSeries = new QAreaSeries(series, 0); // 设置颜色和透明度 QLinearGradient gradient(QPointF(0, 0), QPointF(0, 1)); gradient.setColorAt(0.0, QColor(0, 128, 255, 50)); gradient.setColorAt(1.0, QColor(0, 128, 255, 0)); areaSeries->setBrush(gradient); // 将曲线面积图添加到QChart中 chart->addSeries(areaSeries); // 设置X轴范围和步长 QValueAxis *axisX = new QValueAxis; axisX->setRange(0, 5); axisX->setLabelFormat("%.1f"); axisX->setTickCount(6); chart->addAxis(axisX, Qt::AlignBottom); areaSeries->attachAxis(axisX); // 设置Y轴范围和步长 QValueAxis *axisY = new QValueAxis; axisY->setRange(0, 5); axisY->setLabelFormat("%.1f"); axisY->setTickCount(6); chart->addAxis(axisY, Qt::AlignLeft); areaSeries->attachAxis(axisY); // 显示图表 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); chartView->show(); ``` 这段代码创建了一个曲线面积图,包括一个QLineSeries序列和一个QAreaSeries曲线面积图序列。通过设置QLinearGradient对象的颜色和透明度,可以设置曲线面积图的填充效果。最后,将图表添加到QChartView中并显示出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值