1、概述
QHorizontalStackedBarSeries 是 Qt Charts 模塊中的一個類,用于創建水平堆疊條形圖。它繼承自 QAbstractBarSeries 類,允許將多個數據系列堆疊在一起顯示,每個條形由多個部分組成,這些部分共同構成一個完整的條形,適合展示整體與部分的關系數據。
水平堆疊條形圖中,類別沿垂直軸排列,值沿水平軸顯示,每個類別的條形由多個數據系列的數值疊加而成,便于比較不同類別之間的總量以及各組成部分的占比。
2、重要方法
QHorizontalStackedBarSeries(QObject *parent = nullptr)
:構造函數,創建一個水平堆疊條形圖系列對象。void append(QAbstractBarSet *set)
:向系列中添加一個數據組(QBarSet)。void remove(QAbstractBarSet *set)
:從系列中移除指定的數據組。QList<QAbstractBarSet *> barSets() const
:返回系列中所有的數據組列表。void setBarWidth(qreal width)
:設置條形的寬度,范圍通常在 0.0 到 1.0 之間(相對于類別間隔)。qreal barWidth() const
:獲取當前條形的寬度。void setLabelsVisible(bool visible)
:設置是否顯示數據標簽。bool labelsVisible() const
:判斷數據標簽是否可見。void setLabelsPosition(QAbstractBarSeries::LabelsPosition position)
:設置數據標簽的位置(如標簽在條形內部或外部)。QAbstractBarSeries::LabelsPosition labelsPosition() const
:獲取數據標簽的位置。
3、信號
QHorizontalStackedBarSeries 繼承了 QAbstractBarSeries 的信號,主要包括:
void clicked(int index, QAbstractBarSet *barset)
:當用戶點擊某個數據組的條形時觸發,參數為類別索引和被點擊的數據組。void hovered(bool status, int index, QAbstractBarSet *barset)
:當鼠標懸停在條形上或離開時觸發,status 表示是否懸停,index 為類別索引,barset 為對應的數據組。void pressed(int index, QAbstractBarSet *barset)
:當鼠標按下條形時觸發。void released(int index, QAbstractBarSet *barset)
:當鼠標釋放條形時觸發。void doubleClicked(int index, QAbstractBarSet *barset)
:當雙擊條形時觸發。
4、常用枚舉
QHorizontalStackedBarSeries 主要使用父類 QAbstractBarSeries 中的枚舉:
QAbstractBarSeries::LabelsPosition
:定義數據標簽的位置LabelsCenter
:標簽位于條形中心LabelsInsideEnd
:標簽位于條形內部的末端LabelsInsideBase
:標簽位于條形內部的基部LabelsOutsideEnd
:標簽位于條形外部的末端
5、C++ 實例
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QAreaSeries>
#include <QLegend>
#include <QHCandlestickModelMapper>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);// 創建數據組QBarSet *set1 = new QBarSet("產品A");QBarSet *set2 = new QBarSet("產品B");QBarSet *set3 = new QBarSet("產品C");// 為數據組添加數據*set1 << 1 << 2 << 3 << 4 << 5 << 6;*set2 << 5 << 4 << 3 << 2 << 1 << 0;*set3 << 3 << 3 << 3 << 3 << 3 << 3;// 創建水平堆疊條形系列并添加數據組QHorizontalStackedBarSeries *series = new QHorizontalStackedBarSeries();series->append(set1);series->append(set2);series->append(set3);// 設置條形寬度series->setBarWidth(0.6);// 顯示數據標簽series->setLabelsVisible(true);series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);// 創建圖表并添加系列QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("各地區產品銷售分布");chart->setAnimationOptions(QChart::SeriesAnimations);// 定義類別軸(垂直軸)QStringList categories;categories << "華東" << "華北" << "華南" << "西北" << "西南" << "東北";QBarCategoryAxis *axisY = new QBarCategoryAxis();axisY->append(categories);chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 定義數值軸(水平軸)QValueAxis *axisX = new QValueAxis();axisX->setRange(0, 15);axisX->setTitleText("銷售額 (萬元)");chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);// 創建圖表視圖并顯示QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);QMainWindow window;window.setCentralWidget(chartView);window.resize(800, 600);window.show();return a.exec();
}
覺得有幫助的話,打賞一下唄。。
? ? ? ? ? ?
需要商務合作(定制程序)的歡迎私信!!?