1. 程式人生 > >Qt5中自動匯入檔案生成ScatterChart(雜湊圖)

Qt5中自動匯入檔案生成ScatterChart(雜湊圖)

最近學習了QT中的Qchart的用法,想自動生成雜湊圖ScatterChart,同時自動讀取.txt、.dat檔案來獲得資料座標,以下是生成的一個小的demo檔案。

首先在.pro 中新增:

QT += charts

.h檔案如下:

#ifndef CHARTVIEW_H
#define CHARTVIEW_H

#include <QtCharts/QChartView>

QT_CHARTS_USE_NAMESPACE

class ChartView : public QChartView
{
    Q_OBJECT
public:
    explicit ChartView(QWidget *parent = 0);
};

#endif // CHARTVIEW_H

main.cpp檔案:

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include "chartview.h"

QT_CHARTS_USE_NAMESPACE

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

//![4]
    ChartView *chartView = new ChartView();
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(400,300);
    window.show();
//![4]

    return a.exec();
}

chartview.cpp檔案:

程式中做了詳細的註釋說明,以下就不做贅述了。

#include "chartview.h"
#include <QtCharts/QScatterSeries>
#include <QtCharts/QLegendMarker>
#include <QtCore/QtMath>
#include "QDebug"

#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;

ChartView::ChartView(QWidget *parent) :
    QChartView(new QChart(), parent)
{
    //![1]
    //
    QScatterSeries *series0 = new QScatterSeries();
    series0->setName("scatter1");
    //設定標記的形狀,預設是圓形,並且預設標記的大小是15號
    series0->setMarkerShape(QScatterSeries::MarkerShapeCircle);
    series0->setMarkerSize(10.0);
    //![1]

    //![2]
    //為座標軸新增座標值
    int a[26];
    ifstream infile("C:/f1.txt",ios::in);
    if(!infile)
    {
        qDebug()<<"open error!";
        exit(1);
    }
    for(int i=0;i<26;i++)
        {
            infile>>a[i];
        }
        for(int i=0;i<26;i+=2)
        {
             series0->append(a[i], a[i+1]);
        }
     infile.close();
    //![2]

    //![3]
    //增加雜湊放進圖表中
    setRenderHint(QPainter::Antialiasing);
    chart()->addSeries(series0);

    chart()->setTitle("Simple scatterchart example");
    chart()->createDefaultAxes();
    chart()->setDropShadowEnabled(false);
    //![3]

    //![4]
    //使用散亂點作為圖例標記
    chart()->legend()->setMarkerShape(QLegend::MarkerShapeFromSeries);
    //![4]
}

我這裡使用的是.txt文字檔案,其中的內容如下:

通過append()函式新增座標值,進行繪製散列表。

結果圖如下:

程式碼下載連結: