续接昨天
绘画饼图和堆叠柱状图
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();
}
运行结果