最近学习了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()函数添加坐标值,进行绘制散列表。
结果图如下:
代码下载链接:
https://download.csdn.net/download/jamin_liu_90/10686168