QChart:
The QChart class manages the graphical representation of the chart's series, legends, and axes. QChart is a QGraphicsWidget that you can show in a QGraphicsScene. It manages the graphical representation of different types of series and other chart related class QChartView can be used instead of QChart. In addition, line, spline, area, and scatter series can be presented as polar charts by using the QPolarChart class. QChart類管理圖表系列、圖例和軸的圖形表示。 QChart是一個可以在QGraphicsScene中顯示的QGraphicsWidget。 它管理不同類型的系列和其他圖表相關對象(如圖例和軸)的圖形表示。 要簡單地在布局中顯示圖表,可以使用便利類QChartView代替QChart。 此外,直線、樣條、面積和散射級數可以通過QPolarChart類來表示為極坐標圖.
使用QChart 要在安裝Qt的選擇QChart 模塊 否則 不能使用!!!
使用QChart 要在安裝Qt的選擇QChart 模塊 否則 不能使用!!!
使用QChart 要在安裝Qt的選擇QChart 模塊 否則 不能使用!!!
pro 加入 QT += charts
並且在程序的開頭加上一句 using namespace Qtcharts或者一個宏 QT_CHARTS_USE_NAMESPACE
先來了解幾個部分
QBarSet:
#include <QBarSet> QBarSet(const QString label, QObject *parent = Q_NULLPTR)//構造 QBarSet類表示條形圖中的一組條形。 一個bar集包含每個類別的一個數據值。 假設集合的第一個值屬於第一個類別, 第二個屬於第二個類別,依此類推。 如果集合的值小於類別的值,則假設缺失值位於集合的末尾。對於位於集合中間的缺失值,則使用0的數值。 沒有顯示零值集的標簽。
這 豎 立 五 個 條 就 是 QBarSet:
QBarSet *set0 = new QBarSet("Jane"); QBarSet *set1 = new QBarSet("John"); QBarSet *set2 = new QBarSet("Axel"); QBarSet *set3 = new QBarSet("Mary"); QBarSet *set4 = new QBarSet("Samantha"); *set0 << 1 << 2 << 3 << 4 << 5 << 6;// 名字為 Jane 豎條的 6個值 (分別代表6個月的值) <<符號表示賦值 *set1 << 5 << 0 << 0 << 4 << 0 << 7; *set2 << 3 << 5 << 8 << 19<< 8 << 5; *set3 << 5 << 6 << 7 << 3 << 4 << 5; *set4 << 9 << 7 << 5 << 3 << 1 << 2;
QBarSeries:
#include <QBarSeries> QBarSeries(QObject *parent = Q_NULLPTR) QBarSeries類以垂直條的形式呈現一系列數據,按類別分組。 這個類將數據繪制為一系列按類別分組的豎線,每個類別中有一個豎線添加到這個系列中。 請參閱柱狀圖示例,了解如何創建分組柱狀圖 QBarSeries *series = new QBarSeries(); series->append(set0); series->append(set1); series->append(set2); series->append(set3); series->append(set4); //把上面5個人的 6個月的值放到 series 待會顯示
//在QChart繪圖中,append()的作用主要是給柱、餅、折線賦值之類(個人理解)
QBarCategoryAxis:
#include <QBarCategoryAxis> QBarCategoryAxis(QObject *parent = Q_NULLPTR) QBarCategoryAxis類將類別添加到圖表的軸中。 可以設置QBarCategoryAxis來顯示帶有標記、網格線和陰影的軸線。在刻度之間繪制類別。 它還可以與線系列一起使用,如line和BarChart示例所示。 QStringList categories; categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun"; QBarCategoryAxis *axis = new QBarCategoryAxis(); axis->append(categories);
//QBarCategoryAxis:柱狀圖坐標文字描述
//QValueAxis:設置坐標軸范圍
Qt 的demo:
#include <QtWidgets/QApplication> #include <QtWidgets/QMainWindow> #include <QtCharts/QChartView> #include <QtCharts/QBarSeries> #include <QtCharts/QBarSet> #include <QtCharts/QLegend> #include <QtCharts/QBarCategoryAxis> QT_CHARTS_USE_NAMESPACE int main(int argc, char *argv[]) { QApplication a(argc, argv); //![1] QBarSet *set0 = new QBarSet("Jane"); QBarSet *set1 = new QBarSet("John"); QBarSet *set2 = new QBarSet("Axel"); QBarSet *set3 = new QBarSet("Mary"); QBarSet *set4 = new QBarSet("Samantha"); *set0 << 1 << 2 << 3 << 4 << 5 << 6;// Jane 6個月份的值 *set1 << 5 << 0 << 0 << 4 << 0 << 7; *set2 << 3 << 5 << 8 << 19<< 8 << 5; *set3 << 5 << 6 << 7 << 3 << 4 << 5; *set4 << 9 << 7 << 5 << 3 << 1 << 2; //![1] //![2] QBarSeries *series = new QBarSeries(); series->append(set0); series->append(set1); series->append(set2); series->append(set3); series->append(set4); //![2] //![3] QChart *chart = new QChart(); // 實例化QChart chart->addSeries(series); //往Chart里添加series chart->setTitle("Simple barchart example"); //設置表格頭 chart->setAnimationOptions(QChart::SeriesAnimations); //![3] //![4] QStringList categories; //創建字符串List categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun"; QBarCategoryAxis *axis = new QBarCategoryAxis(); //實例化坐標軸文字標識軸 axis->append(categories); //將字符串列表append到文字標識軸里 chart->createDefaultAxes();//創建默認的坐標軸(笛卡爾坐標),一定要有這一句 chart->setAxisX(axis, series);//設置坐標軸 //![4] //![5] chart->legend()->setVisible(true); //設置圖例為顯示狀態 chart->legend()->setAlignment(Qt::AlignBottom);//設置圖例的顯示位置在底部 //![5] //![6]
//顯示容器 QChartView
QChartView *chartView = new QChartView(chart); //添加Chart到QChartView上 chartView->setRenderHint(QPainter::Antialiasing); //![6] //![7] QMainWindow window; window.setCentralWidget(chartView); window.resize(420, 300); window.show(); //![7] return a.exec(); }