Qt第二十二天

续接之前
百分百柱状图,散点图,光滑曲线图

void MainWindow::iniPercentBar()//初始化PercentBar
{
    QChart *chart=ui->chartViewPercentBar->chart();
    chart->setTitle("Percentbar");
    chart->setAnimationOptions(QChart::AllAnimations);
    ui->chartViewPercentBar->setChart(chart);
    ui->chartViewPercentBar->setRenderHint(QPainter::Antialiasing);
}
void MainWindow::buildPercentBar()//创建PercentBar
{
    QChart *chart=ui->chartViewPercentBar->chart();
    chart->removeAllSeries();
    chart->removeAxis(chart->axisX());
    chart->removeAxis(chart->axisY());
    //
    QBarSet *setMath=new QBarSet(theModel->horizontalHeaderItem(colNoMath)->text());
    QBarSet *setChinese=new QBarSet(theModel->horizontalHeaderItem(colNoChinese)->text());
    QBarSet *setEnglish=new QBarSet(theModel->horizontalHeaderItem(colNoEnglish)->text());
    //
    QTreeWidgetItem *item;
    QStringList categories;
    for(int i=0;i<4;i++)
    {
        item=ui->treeWidget->topLevelItem(i);
        categories<<item->text(0);//
        setMath->append(item->text(colNoMath).toInt());
        setChinese->append(item->text(colNoChinese).toInt());
        setEnglish->append(item->text(colNoEnglish).toInt());
    }
    //从分数段统计数据获得数据,添加到数据集
    QPercentBarSeries *series=new QPercentBarSeries();
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
    series->setLabelsVisible(true);
    chart->addSeries(series);
    //坐标轴
    QBarCategoryAxis *axisX=new QBarCategoryAxis();
    axisX->append(categories);
    chart->setAxisX(axisX,series);
    axisX->setRange(categories.at(0),categories.at(categories.count()-1));
    QValueAxis *axisY=new QValueAxis();
    axisY->setRange(0,100);
    axisY->setTitleText("percent");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.0f");//标签格式
    chart->setAxisY(axisY,series);
    //图例
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);
}


void MainWindow::on_btnPercentBar_clicked()//PercentBar按钮
{
    buildPercentBar();
}


void MainWindow::iniScatterChart()//初始化
{
    QChart *chart=ui->chartViewScatter->chart();
    chart->setTitle("Scatter和SpLine");
    chart->setAnimationOptions(QChart::AllAnimations);
    ui->chartViewScatter->setChart(chart);
    ui->chartViewScatter->setRenderHint(QPainter::Antialiasing);
}


void MainWindow::buildScatterChart()//创建图表
{
    QChart *chart=ui->chartViewScatter->chart();
    chart->removeAxis(chart->axisX());
    chart->removeAxis(chart->axisY());
    chart->removeAllSeries();
    //光滑曲线序列
    QSplineSeries *series=new QSplineSeries();
    series->setName("spline");
    QPen pen;
    pen.setWidth(2);
    pen.setColor(Qt::yellow);
    series->setPen(pen);
    //散点序列
    QScatterSeries *series0=new QScatterSeries();
    series0->setName("散点");
    series0->setMarkerShape(QScatterSeries::MarkerShapeRectangle);//矩形
    series0->setBorderColor(Qt::black);
    series0->setBrush(QBrush(Qt::blue));
    series0->setMarkerSize(12);//设置数据点的大小
    //设置数值
    qsrand(QTime::currentTime().second());//随机数种子
    for(int i=0;i<10;i++)
    {
        int x=qrand()%20;
        int y=qrand()%20;
        series0->append(x,y);
        series->append(x,y);
    }
    chart->addSeries(series);
    chart->addSeries(series0);
    //坐标轴
    chart->createDefaultAxes();//缺省的坐标轴
    chart->axisX()->setTitleText("X");
    chart->axisY()->setTitleText("Y");
    chart->axisX()->setRange(-2,22);
    chart->axisY()->setRange(-2,22);
    //图例
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}


void MainWindow::on_btnScatter_clicked()//刷新图表按钮
{
    buildScatterChart();
}

运行结果
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/theRookie1/article/details/85161830