Qt第二十一天

续接昨天
绘画饼图和堆叠柱状图

void MainWindow::on_btnBuildBarChart_clicked()//刷新柱状图
{
    buildBarChart();
}
void MainWindow::iniPieChart()//初始化PieChart
{
    QChart *chart=new QChart();
    chart->setTitle("PieChart");
    chart->setAnimationOptions(QChart::AllAnimations);
    ui->chartViewPie->setChart(chart);
    ui->chartViewPie->setRenderHint(QPainter::Antialiasing);
}
void MainWindow::buildPieChart()//创建饼状图
{
    QChart *chart=ui->chartViewPie->chart();//获取chart
    chart->removeAllSeries();
    int colNo=1+ui->cBoxCourse->currentIndex();
    QPieSeries *series=new QPieSeries();//创建序列
    series->setHoleSize(ui->spinHoleSize->value());//设置空心大小
    for(int i=0;i<4;i++)
    {
        QTreeWidgetItem *item=ui->treeWidget->topLevelItem(i);
        series->append(item->text(0),item->text(colNo).toFloat());
    }
    QPieSlice *slice;
    for(int i=0;i<4;i++)//设置每个分块的标签文字
    {
        slice=series->slices().at(i);
        slice->setLabel(slice->label()+QString::asprintf("%.0f人,%.1f%",slice->value(),slice->percentage()*100));
        //connect(slice,SIGNAL(hovered(bool)),this,SLOT())
    }
    slice->setExploded(true);//切片分离
    series->setLabelsVisible(true);
    chart->addSeries(series);
    chart->setTitle(ui->cBoxCourse->currentText());
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}


void MainWindow::on_btnDrawPieChart_clicked()//刷新PieChart
{
    buildPieChart();
}
void MainWindow::iniStackedBar()//初始化StackedBar
{
    QChart *chart=ui->chartViewStackedBar->chart();
    chart->setTitle("StackBar");
    chart->setAnimationOptions(QChart::AllAnimations);
    ui->chartViewStackedBar->setChart(chart);
    ui->chartViewStackedBar->setRenderHint(QPainter::Antialiasing);
}
void MainWindow::buildStackedBar()//创建StackedBar
{
    QChart *chart=ui->chartViewStackedBar->chart();//获取QChart对象
    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());
    for(int i=0;i<theModel->rowCount();i++)
    {
        setMath->append(theModel->item(i,colNoMath)->text().toInt());
        setChinese->append(theModel->item(i,colNoChinese)->text().toInt());
        setEnglish->append(theModel->item(i,colNoEnglish)->text().toInt());
    }
    //创建QStackedBarSeries对象,并添加数据集
    QStackedBarSeries *series=new QStackedBarSeries();
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
    series->setLabelsVisible(true);//显示每段的标签
    chart->addSeries(series);//添加序列到图表
    //创建横轴
    QStringList categories;
    for(int i=0;i<theModel->rowCount();i++)
    {
        categories<<theModel->item(i,colNoName)->text();
    }
    QBarCategoryAxis *axisX=new QBarCategoryAxis();//类别坐标轴作为横轴
    axisX->append(categories);
    chart->setAxisX(axisX);
    axisX->setRange(categories.at(0),categories.at(categories.count()-1));
    //数值坐标轴作为纵轴
    QValueAxis *axisY=new QValueAxis();
    axisY->setRange(0,300);
    axisY->setTitleText("总分");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.0f");
    chart->setAxisY(axisY);
    //设置图例
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}




void MainWindow::on_btnBuildStackedBar_clicked()//刷新碓叠柱状图
{
    buildStackedBar();
}


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

在这里插入图片描述

猜你喜欢

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