QChart类管理图表系列、图例和轴的图形表示。
QChart是一个你可以在qgraphicscene中显示的qgraphicswwidget。它管理不同类型的级数和其他图表相关对象(如图例和轴)的图形表示。要在布局中简单地显示图表,可以使用方便类QChartView代替QChart。此外,可以使用QPolarChart类将直线、样条、区域和散点序列表示为极坐标图。
QChart *chart=new QChart();
QCategoryAxis *axisy=new QCategoryAxis();
axisy->setMin(0);
axisy->setMax(100);
axisy->setStartValue(0); //值的起始位置
axisy->append("10",10);
axisy->append("20",20);
axisy->append("30",30);
axisy->append("40",40);
axisy->append("50",50);
axisy->append("60",60);
axisy->append("70",70);
axisy->append("80",80);
axisy->append("90",90);
axisy->append("100",100);
QCategoryAxis *axisx=new QCategoryAxis();
axisx->setMin(0);
axisx->setMax(100);
axisx->setStartValue(0);
axisx->append("10",10);
axisx->append("20",20);
axisx->append("30",30);
axisx->append("40",40);
axisx->append("50",50);
axisx->append("60",60);
axisx->append("70",70);
axisx->append("80",80);
axisx->append("90",90);
axisx->append("100",100);
chart->setAxisY(axisy); //y轴
chart->setAxisX(axisx); //x轴
//chart->createDefaultAxes(); //基于已添加到图表中的序列为图表创建轴。
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing); //抗锯齿
16、示例1
折线图加散点图,当鼠标放到点上时通过QToolTip::showText来显示提示内容
QChart *chart=new QChart();
QCategoryAxis *axisy=new QCategoryAxis(this);
//axisy->setGridLineColor(QColor(255,0,0));
axisy->setMin(0);
axisy->setMax(100);
axisy->setStartValue(0); //值的起始位置
axisy->append("0",0);
axisy->append("10",10);
axisy->append("20",20);
axisy->append("30",30);
axisy->append("40",40);
axisy->append("50",50);
axisy->append("60",60);
axisy->append("70",70);
axisy->append("80",80);
axisy->append("90",90);
axisy->append("100",100);
axisy->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);
axisy->setTickCount(10);
QCategoryAxis *axisx=new QCategoryAxis(this);
axisx->setMin(0);
axisx->setMax(100);
axisx->setStartValue(0);
axisx->append("0",0);
axisx->append("10",10);
axisx->append("20",20);
axisx->append("30",30);
axisx->append("40",40);
axisx->append("50",50);
axisx->append("60",60);
axisx->append("70",70);
axisx->append("80",80);
axisx->append("90",90);
axisx->append("100",100);
axisx->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);
axisx->setTickCount(10);
//线
QLineSeries *lineSeries=new QLineSeries(this);
QList<QPointF> pos;
pos<<QPointF(0.,30.)<<QPointF(10,60)<<QPointF(20,10)<<QPointF(30,90)<<QPointF(40,30)<<QPointF(50,40)<<QPointF(60,60)<<QPointF(70,30)<<QPointF(80,60)<<QPointF(90,20);
lineSeries->append(pos);
//散点
QScatterSeries *scatterSeries=new QScatterSeries(this);
scatterSeries->setBorderColor(QColor(0,255,0));
scatterSeries->setMarkerSize(10);
scatterSeries->append(pos);
lineSeries->setName("折线图");
chart->addSeries(lineSeries);
chart->addSeries(scatterSeries);
chart->setAxisX(axisx);
chart->setAxisY(axisy);
//自己绘制的x,y轴需要额外设置下面两句,否则线和轴对不准,在chart设置完x,y轴之后加
lineSeries->attachAxis(axisx);
lineSeries->attachAxis(axisy);
scatterSeries->attachAxis(axisx);
scatterSeries->attachAxis(axisy);
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing); //抗锯齿
connect(scatterSeries,&QScatterSeries::hovered,this,[this](const QPointF &point, bool state){
if(state)
{
QString str=QString("%1,%2").arg(point.x()).arg(point.y());
QToolTip::showText(QCursor::pos(),str,this);
}
});