Qt第二十一天
阿新 • • 發佈:2018-12-21
續接昨天
繪畫餅圖和堆疊柱狀圖
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(); }
執行結果