天天看点

Qt简单曲线图绘制(Qt5.9 Qt Charts)

Qt简单曲线图绘制(Qt5.9 Qt Charts)

效果图:

Qt简单曲线图绘制(Qt5.9 Qt Charts)

首先创建工程

Qt简单曲线图绘制(Qt5.9 Qt Charts)

工程建立以后进入Mainwindow.ui设计界面,如下图所示:

Qt简单曲线图绘制(Qt5.9 Qt Charts)

关键的控件和控件命名已经详细标出,照着弄就完事儿了。废话不多说上代码:

在.pro 包含:QT += charts

mainwindow.h 代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts/QChart>
using namespace QtCharts;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_btnSlineColor_clicked();

    void on_btnSplinePointColor_clicked();

    void on_chkDataPoint_stateChanged(int arg1);

    void on_chkDataPointLabelVisible_stateChanged(int arg1);


private:
    //创建光滑曲线序列
    void createQSplineSeries();
private:
    Ui::MainWindow *ui;
    int i = 0;
    QList<QString *> m_charts;
    QStringList two;
    QStringList one;
    QStringList five;
};
#endif // MAINWINDOW_H

           

mainwindow.cpp 代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLineSeries>
#include <QSplineSeries>
#include <QValueAxis>
#include <QCategoryAxis>
#include <QColorDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->tableWidget->setColumnCount(3);
    QStringList headText = QStringList() << QStringLiteral("星期") << QStringLiteral("最低温度(°C)") << QStringLiteral("最高温度(°C)");
    ui->tableWidget->setHorizontalHeaderLabels(headText);
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    //设置行数
    ui->tableWidget->setRowCount(7);

    two <<"周一"<<"周二"<<"周三"<<"周四"<<"周五"<<"周六"<<"周七";

    one <<"4"<<"2"<<"5"<<"1"<<"5"<<"2"<<"5";

    five <<"11"<<"12"<<"18"<<"14"<<"15"<<"18"<<"17";

    for(int i=0;i<7;i++)
    {
        int col = 0;
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(two.at(i)));
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(one.at(i)));
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(five.at(i)));
    }
    createQSplineSeries();

}

void MainWindow::createQSplineSeries()
{

    ui->chartViewQSpline->setRenderHint(QPainter::Antialiasing);
    ui->chartViewQSpline->chart()->setTitle(QStringLiteral("QSplineSeries演示"));
    ui->chartViewQSpline->chart()->setTheme(QChart::ChartThemeDark);
    //创建光滑曲线序列,并添加数据
    QSplineSeries *spLineSeries = new QSplineSeries;
    spLineSeries->setName(QStringLiteral("最高温"));
    for (int i = 0; i < ui->tableWidget->rowCount(); i++)
    {
        spLineSeries->append(i, ui->tableWidget->item(i, 2)->text().toInt());
    }
    ui->chartViewQSpline->chart()->addSeries(spLineSeries);
    //创建坐标轴
    QValueAxis *axisX = new QValueAxis;
    axisX->setRange(0, 6);
    axisX->setTickCount(7);
    axisX->setLabelsVisible(false);//x轴坐标显示
    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(0, 40);
    ui->chartViewQSpline->chart()->setAxisX(axisX, spLineSeries);
    ui->chartViewQSpline->chart()->setAxisY(axisY, spLineSeries);

    //创建折现序列,并添加数据
    QLineSeries *lineSeries = new QLineSeries;
    lineSeries->setName(QStringLiteral("最低温"));
    for (int i = 0; i < ui->tableWidget->rowCount(); i++)
    {
        lineSeries->append(i, ui->tableWidget->item(i, 1)->text().toInt());
    }
    ui->chartViewQSpline->chart()->addSeries(lineSeries);
    ui->chartViewQSpline->chart()->setAxisX(axisX, lineSeries);
    ui->chartViewQSpline->chart()->setAxisY(axisY, lineSeries);
    //显示曲线的数据点
    lineSeries->setPointsVisible(true);
    spLineSeries->setPointsVisible(true);
    //图例
    ui->chartViewQSpline->chart()->legend()->setAlignment(Qt::AlignBottom);
}

void MainWindow::on_btnSlineColor_clicked()
{//设置光滑曲线:线条颜色
    QLineSeries *lineSeries = (QLineSeries *)ui->chartViewQSpline->chart()->series().at(1);
    QColor color = lineSeries->pen().color();
    color = QColorDialog::getColor(color);
    QPen pen = lineSeries->pen();
    pen.setColor(color);
    lineSeries->setPen(pen);
}

void MainWindow::on_btnSplinePointColor_clicked()
{//设置光滑曲线:数据点颜色
    QSplineSeries *splineSeries = (QSplineSeries *)ui->chartViewQSpline->chart()->series().at(0);
    QColor color = splineSeries->pen().color();
    color = QColorDialog::getColor(color);
    QPen pen = splineSeries->pen();
    pen.setColor(color);
    splineSeries->setPen(pen);
}

void MainWindow::on_chkDataPoint_stateChanged(int arg1)
{//设置光滑曲线:数据点显示
    QLineSeries *lineSeries = (QLineSeries *)ui->chartViewQSpline->chart()->series().at(0);
    QSplineSeries *splineSeries = (QSplineSeries *)ui->chartViewQSpline->chart()->series().at(1);
    if (Qt::Checked == arg1)
    {
        lineSeries->setPointsVisible(true);
        splineSeries->setPointsVisible(true);
    }
    else
    {
        lineSeries->setPointsVisible(false);
        splineSeries->setPointsVisible(false);
    }
}

void MainWindow::on_chkDataPointLabelVisible_stateChanged(int arg1)
{//设置光滑曲线:数据点标签显示
    QLineSeries *lineSeries = (QLineSeries *)ui->chartViewQSpline->chart()->series().at(0);
    QSplineSeries *splineSeries = (QSplineSeries *)ui->chartViewQSpline->chart()->series().at(1);
    if (Qt::Checked == arg1)
    {
        lineSeries->setPointLabelsVisible(true);
        splineSeries->setPointLabelsVisible(true);
    }
    else
    {
        lineSeries->setPointLabelsVisible(false);
        splineSeries->setPointLabelsVisible(false);
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
           

下载地址:源代码下载

觉得有用的小伙伴不要吝啬你们赞哟~(▽)

继续阅读