Qt绘制折线

 

#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QFont>
#include <QToolTip>
#include <cmath>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    // 创建图表框架
    QChartView *chartView = new QChartView;
    QChart *chart = new QChart();
    chart->setTitle(u8"多组数据折线图示例");
    QFont titleFont("Arial", 14, QFont::Bold);
    chart->setTitleFont(titleFont);
    chartView->setChart(chart);

    // 创建第一组折线序列
    QLineSeries *series0 = new QLineSeries();
    series0->setName(u8"Sin曲线");
    chart->addSeries(series0);
    // 为第一组序列添加数据点
    for (double i = 0; i < 10; i=i+0.1) {
        qreal t = i;
        qreal y1 = std::sin(t * 0.5) * 10;
        series0->append(t, y1);
    }

    // 创建第二组折线序列
    QLineSeries *series1 = new QLineSeries();
    series1->setName(u8"Cos曲线");
    chart->addSeries(series1);
    // 为第二组序列添加数据点
    for (double i = 0; i < 10; i = i + 0.1) {
        qreal t = i;
        qreal y2 = std::cos(t * 0.5) * 10;
        series1->append(t, y2);
    }


    // 创建第三组折线序列
    QLineSeries *series3 = new QLineSeries();
    series3->setName(u8"Cos曲线");
    chart->addSeries(series3);
    // 为第二组序列添加数据点
    for (double i = 0; i < 10; i = i + 0.1) {
        qreal t = i;
        qreal y2 = std::cos(t * 0.5) * 5;
        series3->append(t, y2);
    }

    // 创建坐标轴
    QValueAxis *axisX = new QValueAxis;
    axisX->setRange(0, 10);
    axisX->setTitleText("time (secs)");
    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(-15, 15);
    axisY->setTitleText("value");

    // 为序列设置坐标轴
    chart->setAxisX(axisX, series0);
    chart->setAxisY(axisY, series0);
    chart->setAxisX(axisX, series1);
    chart->setAxisY(axisY, series1);
    chart->setAxisX(axisX, series3);
    chart->setAxisY(axisY, series3);

    //
    QObject::connect(series0, &QLineSeries::hovered, [](const QPointF &point, bool state) {
        if (state) {
            QToolTip::showText(QCursor::pos(), QString("X: %1\nY: %2").arg(point.x()).arg(point.y()));
        }
        else {
            QToolTip::hideText();
        }
    });
    //
    QObject::connect(series1, &QLineSeries::hovered, [](const QPointF &point, bool state) {
        if (state) {
            QToolTip::showText(QCursor::pos(), QString("X: %1\nY: %2").arg(point.x()).arg(point.y()));
        }
        else {
            QToolTip::hideText();
        }
        });
    //
    QObject::connect(series3, &QLineSeries::hovered, [](const QPointF &point, bool state) {
        if (state) {
            QToolTip::showText(QCursor::pos(), QString("X: %1\nY: %2").arg(point.x()).arg(point.y()));
        }
        else {
            QToolTip::hideText();
        }
        });
    //
    // 设置图表主题和图例
    chart->setTheme(QChart::ChartThemeBlueCerulean);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

    // 显示图表
    chartView->setRenderHint(QPainter::Antialiasing);
    chartView->resize(800, 600);
    chartView->show();

    return a.exec();
}

 

 

c2d616ffd30a6b51ca1b80fe8a7569fa

 

 

###############################

posted @ 2025-12-17 22:20  西北逍遥  阅读(4)  评论(0)    收藏  举报