Qt5中自動匯入檔案生成ScatterChart(雜湊圖)
阿新 • • 發佈:2019-01-11
最近學習了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()函式新增座標值,進行繪製散列表。
結果圖如下:
程式碼下載連結: