《 QT5.9 c++ 開發指南》各種常見圖表的繪製(一個例子讓你不再擔心表圖的繪製)

    本例子記錄了QChart圖的其他常見表格的繪製,方便實用,需要的同學可以下載下來,當作例子來看。

    使用QChart一定要記得 在的你工程文件下加上: QT += charts

    話不多說,我們先上例子效果吧:

界面佈局可以參考例子:

 鏈接:本文鏈接例子  提取碼:f1u8 

話不多說上例子程序:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include    <QStandardItemModel>
#include    <QItemSelectionModel>


#include    <QtCharts>  //必須這麼設置
//using namespace QtCharts;   //必須這麼設置
QT_CHARTS_USE_NAMESPACE

#define     fixedColumnCount   5    //數據模型的列數
#define     iniDataRowCount    40   //學生個數

#define     colNoName       0   //姓名的列編號
#define     colNoMath       1   //數學的列編號
#define     colNoChinese    2   //語文的列編號
#define     colNoEnglish    3   //英語的列編號
#define     colNoAverage    4   //平均分的列編號


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    QStandardItemModel  *theModel;//數據模型
//    QItemSelectionModel *theSelection;//Item選擇模型

    void    iniData();//初始化數據
    void    surveyData();//統計數據

    void    iniBarChart(); //柱狀圖初始化
    void    buildBarChart();//構建柱狀圖

    void    iniPiewChart(); //餅圖初始化
    void    buildPieChart(); //構建餅圖

    void    iniStackedBar(); //堆積圖初始化
    void    buildStackedBar(); //構建堆積圖

    void    iniPercentBar(); //初始化
    void    buildPercentBar(); //構建圖表

    void    iniScatterChart(); //初始化
    void    buildScatterChart(); //構建圖表

private slots:
//三個分數列的數據發生變化,重新計算平均分
    void on_itemChanged(QStandardItem *item);

    void on_PieSliceHighlight(bool show);

    void on_chartBarLegendMarkerClicked();
///////

    void on_actTongJi_triggered();

    void on_actGenData_triggered();

    void on_btnBuildBarChart_clicked();

//    void on_cBoxCourse_currentIndexChanged(int index);

    void on_btnDrawPieChart_clicked();

    void on_cBoxCourse_currentIndexChanged(int index);

    void on_spinHoleSize_valueChanged(double arg1);

    void on_spinPieSize_valueChanged(double arg1);

    void on_btnBuildStackedBar_clicked();

    void on_btnPercentBar_clicked();

    void on_btnScatter_clicked();

    void on_cBoxTheme_currentIndexChanged(int index);

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


   對應的cpp文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include    <QTime>
#include    <QBarSet>
#include    <QInputDialog>

void MainWindow::iniData()
{ //數據初始化
    QStringList     headerList;
    headerList<<"姓名"<<"數學"<<"語文"<<"英語"<<"平均分";
    theModel->setHorizontalHeaderLabels(headerList); //設置表頭文字

//    QString studName;
//    QStandardItem   *aItem;
//    qreal   score,avgScore;

    qsrand(QTime::currentTime().second());//隨機數種子
    for (int i=0;i<theModel->rowCount();i++)
    {
        QString studName=QString::asprintf("學生%2d",i+1);
        QStandardItem*  aItem=new QStandardItem(studName);//創建item
        aItem->setTextAlignment(Qt::AlignHCenter);
        theModel->setItem(i,colNoName,aItem); //i行,學生列,設置item

        qreal avgScore=0;
        for (int j=colNoMath;j<= colNoEnglish;j++) //數學,語文,英語
        { //不包含最後一列
            qreal score=50.0+(qrand() % 50);//隨機數
            avgScore+=score;

            aItem=new QStandardItem(QString::asprintf("%.0f",score));//創建 item
            aItem->setTextAlignment(Qt::AlignHCenter);
            theModel->setItem(i,j,aItem); //爲模型的某個行列位置設置Item
        }
        aItem=new QStandardItem(QString::asprintf("%.1f",avgScore/3));//創建平均分item
        aItem->setTextAlignment(Qt::AlignHCenter);
        aItem->setFlags(aItem->flags() & (!Qt::ItemIsEditable));//平均分不允許編輯
        theModel->setItem(i,colNoAverage,aItem); //平均分
    }
}

void MainWindow::surveyData()
{ //數據統計
    int cnt50,cnt60,cnt70,cnt80,cnt90;

    qreal   sumV,minV,maxV;
    qreal   val;
    QTreeWidgetItem *item; //節點

    int i,j;
    for(i=colNoMath;i<=colNoAverage;i++)
    {
        sumV=0;
        cnt50=0;
        cnt60=0;
        cnt70=0;
        cnt80=0;
        cnt90=0;

        for(j=0;j<theModel->rowCount();j++)
        {
            val=theModel->item(j,i)->text().toDouble();
            ////////////////////////////
            if (j==0)
            {
                minV=val;
                maxV=val;
            }
            if (val<minV)
                minV=val;
            if (val>maxV)
                maxV=val;
            //////////////////////////
            sumV+=val;

            if (val<60)
                cnt50++;
            else if ((val>=60) && (val<70))
                cnt60++;
            else if ((val>=70) && (val<80))
                cnt70++;
            else if ((val>=80) && (val<90))
                cnt80++;
            else
                cnt90++;
        }
        //////////
        item=ui->treeWidget->topLevelItem(0); //<60
        item->setText(i,QString::number(cnt50));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(1); //60
        item->setText(i,QString::number(cnt60));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(2); //70
        item->setText(i,QString::number(cnt70));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(3); //80
        item->setText(i,QString::number(cnt80));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(4); //90
        item->setText(i,QString::number(cnt90));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(5); //average
        item->setText(i,QString::number(sumV/theModel->rowCount()));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(6); //max
        item->setText(i,QString::number(maxV));
        item->setTextAlignment(i,Qt::AlignHCenter);

        item=ui->treeWidget->topLevelItem(7); //min
        item->setText(i,QString::number(minV));
        item->setTextAlignment(i,Qt::AlignHCenter);
    }
}

void MainWindow::iniBarChart()
{ //柱狀圖初始化
    QChart *chart = new QChart(); //創建chart
    chart->setTitle("Barchart演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->chartViewBar->setChart(chart); //爲ChartView設置chart
    ui->chartViewBar->setRenderHint(QPainter::Antialiasing);
}

void MainWindow::buildBarChart()
{ //構造柱狀圖
//#define     colNoName       0
//#define     colNoMath       1
//#define     colNoChinese    2
//#define     colNoEnglish    3
//#define     colNoAverage    4

//    ui->chartViewBar->chart()->removeAllSeries();
//    ui->chartViewBar->chart()->removeAxis();

    QChart *chart =ui->chartViewBar->chart(); //獲取ChartView關聯的chart
//    if(chart->series().count()>0)
    chart->removeAllSeries(); //刪除所有序列

    chart->removeAxis(chart->axisX()); //刪除座標軸
    chart->removeAxis(chart->axisY()); //刪除座標軸

//創建三個QBarSet數據集,從數據模型的表頭獲取Name
    QBarSet *setMath = new QBarSet(theModel->horizontalHeaderItem(colNoMath)->text());
    QBarSet *setChinese = new QBarSet(theModel->horizontalHeaderItem(colNoChinese)->text());
    QBarSet *setEnglish= new QBarSet(theModel->horizontalHeaderItem(colNoEnglish)->text());

    QLineSeries *Line = new QLineSeries(); //創建一個QLineSeries序列用於顯示平均分
    Line->setName(theModel->horizontalHeaderItem(colNoAverage)->text());
    QPen    pen;
    pen.setColor(Qt::red);
    pen.setWidth(2);
    Line->setPen(pen);
//    lineseries->setPointLabelsVisible(true);
//    lineseries->setPointLabelsFormat("@yPoint");

    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()); //英語
        Line->append(QPointF(i,theModel->item(i,colNoAverage)->text().toFloat()));  //平均分
    }

//創建一個柱狀圖序列 QBarSeries, 並添加三個數據集
    QBarSeries *series = new QBarSeries();
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
//    series->setLabelsVisible(true);
//    series->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);// LabelsCenter
//    series->setLabelsPosition(QAbstractBarSeries::LabelsCenter);// LabelsCenter

//    lineseries->setPointLabelsVisible(true);
//    lineseries->setPointLabelsFormat("@yPoint");

    chart->addSeries(series); //添加柱狀圖序列
    chart->addSeries(Line); //添加折線圖序列

//用於橫座標在字符串列表,即學生姓名
    QStringList categories;
    for (int i=0;i<theModel->rowCount();i++)
        categories <<theModel->item(i,colNoName)->text();

//用於柱狀圖的座標軸
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    axisX->append(categories); //添加橫座標文字列表
//    chart->createDefaultAxes();
    chart->setAxisX(axisX, series); //設置橫座標
    chart->setAxisX(axisX, Line);//設置橫座標
    axisX->setRange(categories.at(0), categories.at(categories.count()-1)); //這隻座標軸範圍

//數值型座標作爲縱軸
    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(0, 100);
    axisY->setTitleText("分數");
    axisY->setTickCount(6);//11
    axisY->setLabelFormat("%.0f"); //標籤格式
//    axisY->setGridLineVisible(false);
//    axisY->setMinorTickCount(4);
    chart->setAxisY(axisY, series); //爲
    chart->setAxisY(axisY, Line);

//    lineseries->setPointLabelsVisible(true);
//    lineseries->setPointLabelsFormat("@yPoint");

    chart->legend()->setVisible(true); //顯示圖例
    chart->legend()->setAlignment(Qt::AlignBottom); //圖例顯示在下方

//    foreach (QLegendMarker* marker, chart->legend()->markers()) {
//        QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_chartBarLegendMarkerClicked()));
//        QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_chartBarLegendMarkerClicked()));
//    }

}

void MainWindow::iniPiewChart()
{ //餅圖初始化
    QChart *chart = new QChart();
    chart->setTitle(" Piechart演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    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(); //獲取分析對象,數學、英語、語文或平均分
//    QTreeWidgetItem *item; //節點

    QPieSeries *series = new QPieSeries(); //創建餅圖序列
    series->setHoleSize(ui->spinHoleSize->value()); //餅圖中間空心的大小

    for (int i=0;i<=4;i++) //添加分塊數據
    {
        QTreeWidgetItem*  item=ui->treeWidget->topLevelItem(i); //獲得QTreeWidgetItem的item
        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(on_PieSliceHighlight(bool)));
    }
    slice->setExploded(true); //最後一個設置爲exploded
    series->setLabelsVisible(true); //隻影響當前的slices,必須添加完slice之後再設置
    chart->addSeries(series); //添加餅圖序列
    chart->setTitle("Piechart----"+ui->cBoxCourse->currentText());

    chart->legend()->setVisible(true); //圖例
    chart->legend()->setAlignment(Qt::AlignRight);//Qt::AlignRight
//    chart->legend()->setAlignment(Qt::AlignBottom);//Qt::AlignRight
}

void MainWindow::iniStackedBar()
{//初始化疊加柱狀圖繪製窗口
    QChart *chart = new QChart();
    chart->setTitle("StackedBar 演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->chartViewStackedBar->setChart(chart);
    ui->chartViewStackedBar->setRenderHint(QPainter::Antialiasing);
}

void MainWindow::buildStackedBar()
{//繪製疊加柱狀圖
    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);//顯示每段的標籤
//    series->setLabelsPosition(QAbstractBarSeries::LabelsCenter);// LabelsCenter

    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, series);
//    chart->setAxisX(axisX, lineseries);
    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, series);

    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);
}

void MainWindow::iniPercentBar()
{//百分比柱狀圖初始化
    QChart *chart = new QChart();
    chart->setTitle("PercentBar 演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->chartViewPercentBar->setChart(chart);
    ui->chartViewPercentBar->setRenderHint(QPainter::Antialiasing);
}

void MainWindow::buildPercentBar()
{//繪製百分比柱狀圖
    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).toFloat());
        setChinese->append(item->text(colNoChinese).toFloat());
        setEnglish->append(item->text(colNoEnglish).toFloat());
    }

    QPercentBarSeries *series = new QPercentBarSeries(); //序列
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
    series->setLabelsVisible(true);//顯示百分比
//    series->setLabelsFormat("@value人");

    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("百分比");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.1f"); //標籤格式
    chart->setAxisY(axisY, series);

    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight); //AlignBottom
}

void MainWindow::iniScatterChart()
{//散點圖初始化
    QChart *chart = new QChart();
    chart->setTitle("QScatterSeries 和 QSplineSeries 演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->chartViewScatter->setChart(chart);
    ui->chartViewScatter->setRenderHint(QPainter::Antialiasing);
}

void MainWindow::buildScatterChart()
{ //繪製 QScatterSeries和QSplineSeries圖
    QChart *chart =ui->chartViewScatter->chart();
    chart->removeAllSeries();
    chart->removeAxis(chart->axisX());
    chart->removeAxis(chart->axisY());

    QSplineSeries *seriesLine = new QSplineSeries(); //光滑曲線序列
    seriesLine->setName("spline");
    QPen pen;
    pen.setColor(Qt::blue);
    pen.setWidth(2);
//    seriesLine->setColor(Qt::blue);
    seriesLine->setPen(pen);

    QScatterSeries *series0 = new QScatterSeries(); //散點序列
    series0->setName("散點");
    series0->setMarkerShape(QScatterSeries::MarkerShapeCircle);//MarkerShapeRectangle,MarkerShapeCircle
    series0->setBorderColor(Qt::black);
    series0->setBrush(QBrush(Qt::red));
    series0->setMarkerSize(12);

//    int x,y;
    qsrand(QTime::currentTime().second());//隨機數種子

    for (int i=0;i<10;i++)
    {
        int x=(qrand() % 20);//0到20之間的隨機數
        int y=(qrand() % 20);
        series0->append(x,y); //散點序列
        seriesLine->append(x,y); //光滑曲線序列
    }

    chart->addSeries(series0);
    chart->addSeries(seriesLine);

//    QValueAxis *axisY = new QValueAxis;
//    axisY->setRange(0, 20);
//    axisY->setTitleText("Y");
//    axisY->setTickCount(11);
//    axisY->setLabelFormat("%.0f"); //標籤格式
//    axisY->setGridLineVisible(true);
//    chart->setAxisY(axisY, series0);
//    chart->setAxisY(axisY, seriesLine);

//    QValueAxis *axisX = new QValueAxis;
//    axisX->setRange(0, 20);
//    axisX->setTitleText("X");
//    axisX->setTickCount(11);
//    axisX->setLabelFormat("%.0f"); //標籤格式
//    axisX->setGridLineVisible(true);
//    chart->setAxisX(axisX, series0);
//    chart->setAxisX(axisX, seriesLine);

    chart->createDefaultAxes(); //創建缺省的座標軸
    chart->axisX()->setTitleText("X 軸");
    chart->axisX()->setRange(-2,22);

    chart->axisY()->setTitleText("Y 軸");
    chart->axisY()->setRange(-2,22);


//    chart->setDropShadowEnabled(true);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight); //AlignBottom

    foreach (QLegendMarker* marker, chart->legend()->markers()) {
        QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_chartBarLegendMarkerClicked()));
        QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_chartBarLegendMarkerClicked()));
    }

}

void MainWindow::on_itemChanged(QStandardItem *item)
{ //自動計算平均分
    if ((item->column()<colNoMath) || (item->column()>colNoEnglish))
        return; //如果被修改的item不是數學、語文、英語,就退出

    int rowNo=item->row(); //獲取數據的行編號

    qreal   avg=0;
    QStandardItem   *aItem;
    for (int i=colNoMath;i<=colNoEnglish;i++)
    { //獲取三個分數的和
        aItem=theModel->item(rowNo,i);
        avg+=aItem->text().toDouble();
    }
    avg=avg/3; //計算平均分

    aItem=theModel->item(rowNo,colNoAverage); //獲取平均分數據的item
    aItem->setText(QString::asprintf("%.1f",avg)); //更新平均分數據
}

void MainWindow::on_PieSliceHighlight(bool show)
{ //鼠標移入、移出時觸發hovered()信號,動態設置setExploded()效果
    QPieSlice *slice;
    slice=(QPieSlice *)sender();
//    slice->setLabelVisible(show);
    slice->setExploded(show);
}

void MainWindow::on_chartBarLegendMarkerClicked()
{
    QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender());

    switch (marker->type())
    {
        case QLegendMarker::LegendMarkerTypeXY:
        {
            marker->series()->setVisible(!marker->series()->isVisible());
            marker->setVisible(true);
            break;
        }

        case QLegendMarker::LegendMarkerTypeBar:
        { //bar不好處理, barset不能被隱藏,只能take,但是無法恢復
            marker->series()->setVisible(!marker->series()->isVisible());
            marker->setVisible(true);


//            QBarSet *barset;
//            QBarLegendMarker    *barsetMarker;

//            barsetMarker=qobject_cast<QBarLegendMarker*>(sender());
//            barset=barsetMarker->barset();//
//            barsetMarker->series()->take(barset);//

//            marker->setVisible(true);
            break;
        }

//            qreal alpha = 1.0;
//            if (!marker->series()->isVisible())
//                alpha = 0.5;

//            QColor color;
//            QBrush brush = marker->labelBrush();
//            color = brush.color();
//            color.setAlphaF(alpha);
//            brush.setColor(color);
//            marker->setLabelBrush(brush);

//            brush = marker->brush();
//            color = brush.color();
//            color.setAlphaF(alpha);
//            brush.setColor(color);
//            marker->setBrush(brush);

//            QPen pen = marker->pen();
//            color = pen.color();
//            color.setAlphaF(alpha);
//            pen.setColor(color);
//            marker->setPen(pen);
//            break;
//        }
        default:
            break;
    }

}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    theModel = new QStandardItemModel(iniDataRowCount,fixedColumnCount,this); //數據模型
//    theSelection = new QItemSelectionModel(theModel);//Item選擇模型

////選擇當前單元格變化時的信號與槽
//    connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
//            this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));

    iniData(); //初始化數據
    surveyData();//數據統計
//數據模塊的 itemChanged信號與自定義的槽函數關聯,用於自動計算平均分
    connect(theModel,SIGNAL(itemChanged(QStandardItem *)),
            this,SLOT(on_itemChanged(QStandardItem *)));

    ui->tableView->setModel(theModel); //設置數據模型
//    ui->tableView->setSelectionModel(theSelection);//設置選擇模型
//    this->setCentralWidget(ui->splitter);

    iniBarChart(); //柱狀圖初始化
    iniPiewChart();//餅圖初始化
    iniStackedBar();//堆積圖初始化
    iniPercentBar();//百分比圖初始化
    iniScatterChart(); //散點圖初始化
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actTongJi_triggered()
{
    surveyData();
}


void MainWindow::on_actGenData_triggered()
{
    iniData();
    surveyData();
//    bool    ok=false;
//    int cnt=QInputDialog::getInt(this,"輸入整數","請輸入學生人數",theModel->rowCount(),5,200,1,&ok);
//    if (ok)
//    {
//       theModel->setRowCount(cnt);
//       iniData();
//       surveyData();
//    }
}

void MainWindow::on_btnBuildBarChart_clicked()
{
    buildBarChart();
//    ui->btnBuildBarChart->setEnabled(false);
}

void MainWindow::on_btnDrawPieChart_clicked()
{
    buildPieChart();
}

void MainWindow::on_cBoxCourse_currentIndexChanged(int index)
{
    Q_UNUSED(index);
    buildPieChart();
}

void MainWindow::on_spinHoleSize_valueChanged(double arg1)
{//
    QPieSeries  *series;
    series=(QPieSeries*)ui->chartViewPie->chart()->series().at(0);
    series->setHoleSize(arg1);
}

void MainWindow::on_spinPieSize_valueChanged(double arg1)
{
    QPieSeries  *series;
    series=(QPieSeries*)ui->chartViewPie->chart()->series().at(0);
    series->setPieSize(arg1);
}

void MainWindow::on_btnBuildStackedBar_clicked()
{
    buildStackedBar();
}

void MainWindow::on_btnPercentBar_clicked()
{
    buildPercentBar();
}

void MainWindow::on_btnScatter_clicked()
{
    buildScatterChart();
}

void MainWindow::on_cBoxTheme_currentIndexChanged(int index)
{
    ui->chartViewPie->chart()->setTheme(QChart::ChartTheme(index));
}

 喜歡我的文章就加個關注吧,以後查找筆記十分的方便喲,一起學習奧利給!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章