qt QAreaSeries详解

发布于:2025-09-11 ⋅ 阅读:(15) ⋅ 点赞:(0)
1、概述

QAreaSeries 是 Qt Charts 模块中用于绘制面积图的类。面积图通过填充两个数据系列之间的区域(或单个数据系列与基线之间的区域)来可视化数据,常用于展示数据的变化趋势或对比两组数据的差异。它支持两种模式:两个 QLineSeries 之间的区域,以及单个 QLineSeries 与 X 轴之间的区域。

2、重要方法
  • QAreaSeries(QLineSeries *upperSeries, QLineSeries *lowerSeries):构造函数,指定上下边界线。

  • setUpperSeries(QLineSeries *series):设置上边界线。

  • setLowerSeries(QLineSeries *series):设置下边界线。

  • setBrush(const QBrush &brush):设置填充区域的画刷(颜色/渐变)。

  • setPen(const QPen &pen):设置边框线的样式。

  • setOpacity(qreal opacity):设置填充区域的透明度(0~1)。

  • setPointLabelsVisible(bool visible):设置数据点标签是否可见。

  • setPointsVisible(bool visible):设置数据点是否可见,并确定是否在线上绘制这些点。

3、信号
  • borderColorChanged(QColor color):当线条(画笔)颜色变为 color 时,发出此信号。

  • colorChanged(QColor color):当填充(画刷)颜色变为 color 时,发出此信号。

  • clicked(const QPointF &point):当用户在面积图中单击以触发按下 point 时,将发出此信号。

  • doubleClicked(const QPointF &point):当用户通过双击 point 触发面积图中的第一次按下时,将发出此信号。

  • hovered(const QPointF &point, bool state):当用户将鼠标指针悬停在系列上或将其从系列中移开时,将发出此信号。point 显示悬停事件的原点(坐标)。当光标悬停在面积图上时 statetrue。否则为 false

  • pressed(const QPointF &point):当用户按下面积图中由 point 指定的点时,将发出此信号。

  • released(const QPointF &point):当用户释放在面积图中某个 point 上释放按下状态时,会发出此信号。

  • pointLabelsClippingChanged(bool clipping):当数据点标签的剪裁设置 clipping 发生改变时,将发出此信号。

  • pointLabelsColorChanged(QColor color):当数据点标签的颜色改变为 color 时,发出此信号。

  • pointLabelsFontChanged(QFont font):当数据点标签的字体改变为 font 时,发出此信号。

  • pointLabelsFormatChanged(QString format):当数据点标签的格式改变为 format 时,发出此信号。

  • pointLabelsVisibilityChanged(bool visible):当数据点标签的可见属性改变为 visible 时,发出此信号。

4、实例
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QAreaSeries>
QT_CHARTS_USE_NAMESPACE

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

    // 创建两条线系列(用于定义区域)
    QLineSeries *upperSeries = new QLineSeries();
    QLineSeries *lowerSeries = new QLineSeries();

    // 设置上边界线的数据点
    upperSeries->append(0, 5);
    upperSeries->append(1, 15);
    upperSeries->append(2, 10);
    upperSeries->append(3, 20);

    // 设置下边界线的数据点
    lowerSeries->append(0, 0);
    lowerSeries->append(1, 5);
    lowerSeries->append(2, 3);
    lowerSeries->append(3, 10);

    // 创建 QAreaSeries(区域图)
    QAreaSeries *areaSeries = new QAreaSeries(upperSeries, lowerSeries);
    areaSeries->setName("示例区域图");

    // 设置填充样式
    QBrush brush(Qt::blue);
    brush.setStyle(Qt::SolidPattern);
    areaSeries->setBrush(brush);

    // 设置边框线样式
    QPen pen(Qt::darkBlue);
    pen.setWidth(2);
    areaSeries->setPen(pen);

    // 创建图表对象
    QChart *chart = new QChart();
    chart->addSeries(areaSeries);
    chart->setTitle("QAreaSeries 示例");
    chart->createDefaultAxes();

    // 设置轴范围
    QValueAxis *axisX = new QValueAxis();
    axisX->setRange(0, 3);
    axisX->setTitleText("X 轴");
    chart->setAxisX(axisX, areaSeries);

    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0, 20);
    axisY->setTitleText("Y 轴");
    chart->setAxisY(axisY, areaSeries);

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

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

    return a.exec();
}

点击扫码加入群聊

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 


网站公告

今日签到

点亮在社区的每一天
去签到