首页 > 其他分享 >QAbstractBarSeries 类

QAbstractBarSeries 类

时间:2024-12-08 16:30:43浏览次数:9  
标签:const QAbstractBarSeries 标签 void 柱状图 QBarSet 发出信号

QAbstractBarSeries 类

QAbstractBarSeries 是 Qt 图表模块中所有柱状图系列类的抽象父类。它用于定义柱状图的基本行为和属性,如柱宽、标签位置、数据管理等。


核心功能与特点

  1. 支持多种柱状图系列:

    • 继承类包括:QBarSeriesQStackedBarSeriesQPercentBarSeriesQHorizontalBarSeries 等。
    • 每种系列类型提供不同的柱状图表现形式。
  2. 数据管理:

    • 通过 QBarSet 类管理单个柱数据。
    • 支持动态添加、删除、清空和插入数据集。
  3. 柱状图样式设置:

    • 控制柱宽(barWidth)、标签显示(labelsVisible)、标签格式(labelsFormat)、标签位置(labelsPosition)等。
  4. 交互支持:

    • 提供点击、双击、鼠标悬停等交互信号。

主要属性

柱宽(barWidth)
  • 描述: 设置柱的宽度,单位为 x 轴的单位。
  • 默认值: 通常根据坐标轴的缩放自动调整。
  • 访问方法:
    • 获取:qreal barWidth() const
    • 设置:void setBarWidth(qreal width)
柱数量(count)
  • 描述: 当前系列中 QBarSet 的数量。
  • 访问方法:
    • 获取:int count() const
标签属性
  • 标签显示(labelsVisible):

    • 控制是否显示柱的值标签。
    • 获取:bool isLabelsVisible() const
    • 设置:void setLabelsVisible(bool visible = true)
  • 标签格式(labelsFormat):

    • 控制标签显示格式,可用 @value 占位符表示柱值。
    • 示例:series->setLabelsFormat("@value%");
    • 获取:QString labelsFormat() const
    • 设置:void setLabelsFormat(const QString &format)
  • 标签角度(labelsAngle):

    • 设置标签的显示角度(单位:度)。
    • 获取:qreal labelsAngle() const
    • 设置:void setLabelsAngle(qreal angle)
  • 标签位置(labelsPosition):

    • 设置标签在柱中的位置,枚举值:
      • LabelsCenter: 标签居中。
      • LabelsInsideEnd: 标签位于柱顶部内侧。
      • LabelsInsideBase: 标签位于柱底部内侧。
      • LabelsOutsideEnd: 标签位于柱顶部外侧。
    • 获取:LabelsPosition labelsPosition() const
    • 设置:void setLabelsPosition(QAbstractBarSeries::LabelsPosition position)
  • 标签精度(labelsPrecision):

    • 设置标签显示的数字精度。
    • 获取:int labelsPrecision() const
    • 设置:void setLabelsPrecision(int precision)

主要成员函数

数据管理
  • 添加数据:

    • bool append(QBarSet *set)
      添加单个 QBarSet 数据集到系列中。
    • bool append(const QList<QBarSet *> &sets)
      批量添加多个数据集。
  • 删除数据:

    • bool remove(QBarSet *set)
      删除指定的数据集并释放其内存。
    • void clear()
      删除所有数据集并释放内存。
  • 插入与提取:

    • bool insert(int index, QBarSet *set)
      在指定位置插入数据集。
    • bool take(QBarSet *set)
      从系列中移除指定数据集但不释放其内存。
获取与设置属性
  • 获取数据集列表:

    • QList<QBarSet *> barSets() const
      返回当前系列中的所有数据集列表。
  • 设置与获取柱宽:

    • void setBarWidth(qreal width)
    • qreal barWidth() const

交互信号

鼠标事件
  • void clicked(int index, QBarSet *barset)
    用户单击柱时发出信号。
  • void doubleClicked(int index, QBarSet *barset)
    用户双击柱时发出信号。
  • void hovered(bool status, int index, QBarSet *barset)
    用户悬停在柱上时发出信号。
数据变化
  • void barsetsAdded(const QList<QBarSet *> &sets)
    数据集被添加时发出信号。
  • void barsetsRemoved(const QList<QBarSet *> &sets)
    数据集被移除时发出信号。
  • void countChanged()
    数据集数量变化时发出信号。
标签变化
  • void labelsVisibleChanged()
    标签显示状态变化时发出信号。
  • void labelsAngleChanged(qreal angle)
    标签角度变化时发出信号。
  • void labelsFormatChanged(const QString &format)
    标签格式变化时发出信号。
  • void labelsPositionChanged(QAbstractBarSeries::LabelsPosition position)
    标签位置变化时发出信号。

使用示例

创建一个简单的柱状图
#include <QtCharts>
#include <QApplication>
#include <QMainWindow>

using namespace QtCharts;

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

    // 创建数据集
    QBarSet *set0 = new QBarSet("Product A");
    QBarSet *set1 = new QBarSet("Product B");

    // 添加数据
    *set0 << 10 << 20 << 30 << 40;
    *set1 << 15 << 25 << 35 << 45;

    // 创建柱状图系列
    QBarSeries *series = new QBarSeries();
    series->append(set0);
    series->append(set1);

    // 设置标签
    series->setLabelsVisible(true);
    series->setLabelsFormat("@value units");
    series->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);

    // 创建图表
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setTitle("Sales Data");
    chart->setAnimationOptions(QChart::SeriesAnimations);

    // 设置轴
    QStringList categories = {"Q1", "Q2", "Q3", "Q4"};
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    axisX->append(categories);
    chart->addAxis(axisX, Qt::AlignBottom);
    series->attachAxis(axisX);

    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0, 50);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);

    // 创建图表视图
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    // 显示主窗口
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(800, 600);
    window.show();

    return app.exec();
}

总结

QAbstractBarSeries 是柱状图系列的基础类,为管理柱状图数据、样式和交互提供了强大的功能。通过其派生类(如 QBarSeriesQStackedBarSeries),可以轻松实现各种形式的柱状图,并通过丰富的信号和属性实现动态更新和用户交互功能。

标签:const,QAbstractBarSeries,标签,void,柱状图,QBarSet,发出信号
From: https://blog.csdn.net/qq_43689451/article/details/144327352

相关文章