步骤
1.创建图标
2.添加数据
头文件的私有类成员
QLineSeries *curSeries = new QLineSeries();//当前序列,存储坐标点,Pari类型的数据,便于一起插入点坐标
QValueAxis *curAxis;//当前坐标轴,设置坐标轴的一些信息。
queue< pair<int,int> > series_queue;//从队列获取数据
创建图标
1.提升QChartView
画图要有纸笔,这个QChartView就是充当了纸的角色,但是在ui界面里面,没有这个类,我们的做法是将GraphicsView提升为QChartView,提升方式可以在ui界面里右键提升。
2.创建图标
创建一个QChart,并将它放在QChartView这张纸上,在创建坐标轴,并将坐标轴放在QChart上,一点点设置QChart。
void MainWindow::createChart()
{
QChart *chart = new QChart();
chart->setTitle("算法分析");
curSeries->setName("算法分析折线");
chart->addSeries(curSeries);
ui->chartView->setChart(chart);
//ui->chartView->setRenderHint(QPainter::Antialiasing);//参数代表尽可能的消除基本体边缘的锯齿
QPen pen;
//pen.setStyle();
pen.setWidth(2);
pen.setColor(Qt::red);
curSeries->setPen(pen);
QValueAxis *axisx = new QValueAxis();
curAxis = axisx;//当前坐标轴
axisx->setRange(0, ui->lineEdit_max->text().toInt());//坐标轴范围
axisx->setLabelFormat("%d");//设置坐标格式
axisx->setTickCount(2001);//设置分割数
axisx->setTitleText("值");//设置标题
QValueAxis *axisy = new QValueAxis();
axisy->setRange(0,200);
axisy->setLabelFormat("%d");
axisy->setTickCount(201);
axisy->setTitleText("次数");
chart->setAxisX(axisx,curSeries);//设置x轴
chart->setAxisY(axisy,curSeries);//设置y轴
}
添加数据
添加数据是用QLineSeries类,表示序列,笔者是在队列里添加数据,这切合自己的实际问题,在C++编程规范中明确指出,在没有特殊需求时,应使用vector。
笔者的queue队列保存的是pair类型,是典型的坐标类型。
void MainWindow::prepareData()
{
curSeries->clear();//先清除
while( series_queue.empty() != true)
{
curSeries->append(series_queue.front().first,series_queue.front().second);
series_queue.pop();
}
}
效果展示:
左侧是QListWidget。