用QT写一个数据可视化软件(折线图)

自己有一个这样的需求,就是要把txt中的数据用折线图的方式绘制出来。
原始数据如图1所示、图2将其绘制了出来,图3则展示的是两组数据的对比。
用QT写一个数据可视化软件(折线图)_第1张图片

图1

用QT写一个数据可视化软件(折线图)_第2张图片

图2

用QT写一个数据可视化软件(折线图)_第3张图片

图3

主要简单的设计了一个ui界面,然后用到了QtChart.要想绘制折线图至少要用到QLineSeries、QChart、QChartView这三个类。
下面是ui界面和主要的代码,在文章的最后,会给出百度网盘的代码。
用QT写一个数据可视化软件(折线图)_第4张图片

图4

main.cpp

#include "mainwindow.h"

#include 
#include 
#include 
#include 
#include //显示图表
#include //线系列
#include 

QT_CHARTS_USE_NAMESPACE//QtChart名空间

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

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_selectFile_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include 
#include 
#include 
#include 
#include 
#include //显示图表
#include //线系列
#include 

QT_CHARTS_USE_NAMESPACE//QtChart名空间


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

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


void MainWindow::on_selectFile_clicked()
{

    this->close();//关闭当前界面
    MainWindow *wdg = new MainWindow;//创建widget界面

    //打开文件夹,并且选择指定文件
    QString fileName1 = ui->lineEdit1->text();
    QString fileName2 = ui->lineEdit2->text();
    qDebug()<<fileName1;
    qDebug()<<fileName2;


    QString timeA;
    QFile file1(fileName1);  //参数就是读取用户id文件的路径
    file1.open(QIODevice::ReadOnly);//只读模式
    timeA = file1.readLine(); //按行读,追加
    file1.close();

    QString timeB;
    QFile file2(fileName2);  //参数就是读取用户id文件的路径
    file2.open(QIODevice::ReadOnly);//只读模式
    timeB = file2.readLine(); //按行读,追加
    file2.close();

    //qDebug()<
    QStringList timeAList = timeA.split(" ");
    //qDebug()<

    QStringList timeBList = timeB.split(" ");
    //qDebug()<

    QList<QLineSeries *> m_series;
    QLineSeries *series1 = new QLineSeries();//实例化一个QLineSeries对象
    QLineSeries *series2 = new QLineSeries();//实例化一个QLineSeries对象
    m_series.append(series1);
    m_series.append(series2);
    //设置线条名称
    series1->setName(QString("TimeA"));
    series2->setName(QString("TimeB"));
    //设置线条颜色,如果不设置会给默认颜色
    series1->setColor(QColor(255,0,255));
    series2->setColor(QColor(0,255,255));
    //设置是否线条可视
    series1->setVisible(true);
    series2->setVisible(true);
    //点标签是否可视
    //series1->setPointLabelsVisible(true);
    //series2->setPointLabelsVisible(true);
    //点标签颜色
    series1->setPointLabelsColor(QColor(255,255,255));
    series2->setPointLabelsColor(QColor(0,255,255));
    //点标签字体
    series1->setPointLabelsFont(QFont("微软雅黑"));
    series2->setPointLabelsFont(QFont("微软雅黑"));
    //设置点标签显示格式
    series1->setPointLabelsFormat("(@xPoint,@yPoint)");
    series2->setPointLabelsFormat("(@xPoint,@yPoint)");
    //是否切割边缘点标签,默认为true
    series1->setPointLabelsClipping(false);
    series2->setPointLabelsClipping(true);
    //设置点标签是否可视
    series1->setPointsVisible(true);
    series2->setPointsVisible(true);

    //添加坐标点

    for(int i = 0; i < timeAList.size(); i++)
    {
        float A = timeAList[i].toFloat();
        series1->append(i, A);
    }
    for(int j = 0; j < timeBList.size(); j++)
    {
        float B = timeBList[j].toFloat();
        series2->append(j, B);
    }



    QChart *chart = new QChart();
    chart->setTheme(QChart::ChartThemeBlueCerulean);//设置系统主题
    chart->setAnimationOptions(QChart::AllAnimations);//设置启用或禁用动画
   // chart->setLocalizeNumbers(true);//数字是否本地化
    chart->addSeries(series1);//添加系列到QChart上
    chart->addSeries(series2);//添加系列到QChart上
    chart->createDefaultAxes();//创建默认轴
    chart->setTitle("时间");//设置标题
    chart->setTitleBrush(QBrush(QColor(255,170,255)));//设置标题Brush
    chart->setTitleFont(QFont("微软雅黑"));//设置标题字体

    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐
    chart->legend()->setBackgroundVisible(true);//设置背景是否可视

    chart->legend()->setLabelColor(QColor(255,128,255));//设置标签颜色
    chart->legend()->setVisible(true);//设置是否可视

    chart->legend()->setBorderColor(QColor(255,255,170,185));//设置边框颜色
    QFont font = chart->legend()->font();
    font.setItalic(!font.italic());
    chart->legend()->setFont(font);//设置字体为斜体
    font.setPointSizeF(12);
    chart->legend()->setFont(font);//设置字体大小
    chart->legend()->setFont(QFont("微软雅黑"));//设置字体类型


    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    wdg->setCentralWidget(chartView);
    wdg->resize(960, 720);

    wdg->show();//显示widget界面
}

游戏的代码和软件资源请点击自取【资源在此】(提取码:6666,制作不易,希望点赞收藏一波

你可能感兴趣的:(QT,qt,ui,开发语言)