QT中图表类QChart系列之(6)-在一个chart中显示两条曲线

8 篇文章 14 订阅

首先要了解QChartView、QChart、QLineSeries、QValueAxis的实体之间的关系,例如一个QChartView中可以包含几个QValueAxis?这些可参考《QT中图表类QChart系列之(1)-基本用法,画折线图、各个类之间的关系

 

每个chart可以包含多个QLineSeries数据系列,每个QLineSeries数据系列又包含了2个QValueAxis数值轴或QDateTimeAxis时间轴。

那么这个chart中的多个数据系列,一起显示在同一个chart中,会是什么情形?

新建ui工程,并添加MainWindow私有变量:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QChartView>
#include <QChart>
#include <QLineSeries>
#include <QValueAxis>

QT_CHARTS_USE_NAMESPACE

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QChart *chart;//非必要(QCharView实体中自带一个QChart实体)
    QLineSeries *series_sin, *series_cos;
    QValueAxis *axis_x_sin, *axis_y_sin, *axis_x_cos, *axis_y_cos;
};

#endif // MAINWINDOW_H
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    chart(new QChart),//或者不用new,直接指向ui->graphicsView->chart()也行
    series_sin(new QLineSeries),//sin曲线的数据点
    series_cos(new QLineSeries),//cos曲线的数据点
    axis_x_sin(new QValueAxis),//sin的X轴
    axis_y_sin(new QValueAxis),//sin的Y轴
    axis_x_cos(new QValueAxis),//cos的X轴
    axis_y_cos(new QValueAxis)//cos的Y轴
{
    ui->setupUi(this);
    ui->graphicsView->setChart(chart);//view中显示出chart

    for(float x = 0; x < 10; x += 0.1)
    {
        series_sin->append(x, sin(x));
    }
    axis_x_sin->setRange(-5,25);
    axis_y_sin->setRange(-2,2);
    chart->addSeries(series_sin);
    /*功能是:添加轴,并把轴和数据系列连接。注意,这一行并不能用来给chart添加数据系列
      添加数据系列,要用chart->addSeries*/
    chart->setAxisX(axis_x_sin, series_sin);
    chart->setAxisY(axis_y_sin, series_sin);


    for(float x = 10; x < 20; x += 0.1)
    {
        series_cos->append(x, cos(x));
    }

    axis_x_cos->setRange(5,25);
    axis_y_cos->setRange(-2,2);
    chart->addSeries(series_cos);
    chart->setAxisX(axis_x_cos, series_cos);//cos使用自己的X轴
    chart->setAxisY(axis_y_cos, series_cos);
//    chart->setAxisX(axis_x_sin, series_cos);//cos共享sin曲线的X轴
//    chart->setAxisY(axis_y_sin, series_cos);
}

运行结果如下所示,我们发现,两条曲线各自为政。

 

根据上面程序最后两行的注释,我们如果把这两个QLineSeries数据系列,绑定到同一组XY轴上(也即,两条曲线共享同一组XY轴),两条曲线就能“真正”的显示在同一个chart中了,如下所示。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Qt Chart显示多条曲线图,可以使用QLineSeries来表示每条曲线,并将它们添加到QChart。对于曲线的数值大小,可以通过读取txt文件的数据来获取。 以下是一个简单的示例代码,演示如何在Qt Chart显示多条曲线图,并将曲线的数值大小设置为读取txt文件的数据。 ```cpp #include <QtCharts> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建QChart对象 QChart *chart = new QChart(); // 创建QChartView对象 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); // 创建QFile对象并打开txt文件 QFile file("data.txt"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return -1; // 创建QTextStream对象并绑定QFile对象 QTextStream in(&file); // 创建QLineSeries对象,并设置曲线名称 QLineSeries *series1 = new QLineSeries(); series1->setName("Series 1"); // 从txt文件读取数据,并将数据添加到QLineSeries对象 while (!in.atEnd()) { QString line = in.readLine(); QStringList values = line.split(" "); double x = values[0].toDouble(); double y = values[1].toDouble(); series1->append(x, y); } // 创建第二个QLineSeries对象,并设置曲线名称及数值 QLineSeries *series2 = new QLineSeries(); series2->setName("Series 2"); series2->append(0, 0); series2->append(1, 2); series2->append(2, 4); series2->append(3, 6); series2->append(4, 8); // 将QLineSeries对象添加到QChart对象 chart->addSeries(series1); chart->addSeries(series2); // 设置XY坐标轴范围 chart->createDefaultAxes(); chart->axisX()->setRange(0, 10); chart->axisY()->setRange(0, 10); // 显示QChartView对象 chartView->setWindowTitle("Multiple Line Series"); chartView->resize(400, 300); chartView->show(); return a.exec(); } ``` 在这个示例代码,我们首先创建了一个QChart对象和一个QChartView对象。然后,我们通过QFile和QTextStream读取了一个txt文件的数据,并将数据添加到一个QLineSeries对象。我们还创建了另一个QLineSeries对象,并手动设置了曲线的数值。最后,我们将这两个QLineSeries对象添加到QChart对象,并设置XY坐标轴范围。最终,我们通过QChartView对象显示了整个图表。 需要注意的是,这只是一个简单的示例代码,仅仅演示了如何在Qt Chart显示多条曲线图,并将曲线的数值大小设置为读取txt文件的数据。实际应用,您可能需要根据自己的需求进行更改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值