QT -- QChart畫餅狀圖


Qt 由許多模塊組成,如 Core、GUI、Widgets、WebEngine、QML等。其中的Charts 模塊,包含了一系列有關圖表的組件,使用的是 Qt 的 Graphics View 框架,該模塊以前只在商業版中才有。

從 Qt 5.7 開始,該模塊通過 GPLv3 許可,已經對 Qt 開源版開放使用。

1  餅圖 (pie chart)

1.1  Charts 模塊

  .pro 中添加如下語句:

QT  +=charts

頭文件和命名空間

#include <QtCharts>
using namespace QtCharts;

1.2  代碼示例

1) 頭文件

  Qt  中實現餅圖的例程,主要使用了 QPieSeries + QPieSlice + QChart + QChartView 這四個類,如下所示: #1 ~ #5 聲明了頭文件

#include <QtWidgets/QApplication>

#include <QtWidgets/QMainWindow>

#include <QtCharts/QChartView>

#include <QtCharts/QPieSeries>

#include <QtCharts/QPieSlice>

using namespace QtCharts;

//實際上也可用兩個頭文件代替:

#include <QtWidgets>

#include <QtCharts>

2) QPieSeries 類

#13 ~ #16 新建 QPieSeries 類指針,並將其分為三份,各占10%,20% 和 70%;#17 設置標簽屬性,使其可見;

 int main(intargc, char *argv[])
{
    QApplication a(argc, argv);

    QPieSeries *series = new QPieSeries();

    series->append("10%", 1);  //設置百分百

    series->append("20%", 2);

    series->append("70%", 7);

    series->setLabelsVisible();  //設置標簽可見
}

3) QPieSlice 類

 #19 ~ #24 使用 QPieSlice 設置每一份的顏色,分別為:紅、綠、藍;

QPieSlice *slice_red =series->slices().at(0);

QPieSlice *slice_green =series->slices().at(1);

QPieSlice *slice_blue =series->slices().at(2);

slice_red->setColor(QColor(255,0,0,255));  //設置顏色

slice_green->setColor(QColor(0,255,0,255));

slice_blue->setColor(QColor(0,0,255,255));

4) QChart  和 QChartView

 #26 ~ #29 新建 QChart 類指針,並將 series 添加到 chart 中,然后設置標題和隱藏圖例;

  #31 ~ #32 新建 QChartView 類指針,然后將 chart 添加到 chartview 中,設置其渲染屬性為 “抗混疊” (QPainter::Antialiasing);

  #34 ~ #37 新建 QMainWindow 類對象,並將 chartview 置於中間 (setCentralWidget() 函數),然后重設其大小,並 show() 出來。

//新建QChart,將series添加到chart中

QChart *chart = new QChart();

chart->addSeries(series);

chart->setTitle("PieChart Example");  //設置標題

chart->legend()->hide();  //隱藏圖例


//新建QChartView,將chart添加到chartview里

QChartView *chartview = new QChartView(chart);

chartview->setRenderHint(QPainter::Antialiasing); //設置渲染屬性


//新建QMainWindow,將chartview置於中間

QMainWindow window;

window.setCentralWidget(chartview);

window.resize(480, 360);

window.show();


returna.exec();

}

輸出如下:

  

 

2  圓環圖 (donut chart)

#5 用的是 Qt 中的命名空間聲明,等效於 using namespace QtCharts

  圓環圖中間有空,對應 #11,設置了中間孔的尺寸大小;另外,#21設置了圓環圖的顯示主題,#22 設置的是圖例的字體;其它代碼,餅圖的大同小異。

 1 #include <QtWidgets>
 2 
 3 #include <QtCharts> 
 4 
 5 QT_CHARTS_USE_NAMESPACE           //等效於using namespace QtCharts
 6  
 7 int main(intargc, char *argv[])
 8 {
 9     QApplication a(argc, argv);
10 
11     QPieSeries *series = new QPieSeries();
12 
13      series->setHoleSize(0.35);     //設置圓環中間孔的大小
14 
15      series->append("Protein 4.2%", 4.2);
16 
17      series->append("Carbs 56.4%", 56.4);
18 
19      series->append("Other 23.8%", 23.8);
20 
21 
22      QChartView *chartView = new QChartView();
23 
24     chartView->setRenderHint(QPainter::Antialiasing);
25 
26     chartView->chart()->setTitle("DonutChart Example");
27 
28     chartView->chart()->addSeries(series);
29 
30     chartView->chart()->legend()->setAlignment(Qt::AlignBottom);
31 
32      chartView->chart()->setTheme(QChart::ChartThemeBlueCerulean);   //設置圓環圖的顯示主題
33 
34     chartView->chart()->legend()->setFont(QFont("Arial",7));        //設置圖例的字體
35 
36 
37     QMainWindow window;
38 
39     window.setCentralWidget(chartView);
40 
41     window.resize(400, 300);
42 
43     window.show();
44 
45     returna.exec();
46 
47 }

輸出界面如下:

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM