qt QAreaLegendMarker详解

1. 概述

QAreaLegendMarker 是 Qt Charts 模块中的一部分,用于在图例(Legend)中表示 QAreaSeries 的标记。它负责显示区域图的图例项,通常包含区域颜色样例和对应的描述文字。图例标记和对应的区域图关联,显示区域的名称及其样式,并且可以通过鼠标点击、悬停等方式交互,或者自定义图例项的样式。

2. 重要方法

  • QAreaLegendMarker::series() const: 返回该图例标记所关联的 QAreaSeries 数据系列。
  • QAreaLegendMarker::setVisible(bool visible): 设置图例标记的可见性。若设置为 false,则该图例标记将不可见。
  • **QAreaLegendMarker::isVisible() const:**返回图例标记是否可见。
  • **void setBrush(const QBrush &brush):**设置标记的填充样式(颜色或渐变)。
  • **QString label() const:**获取图例标记的文本标签。

  • **void setLabel(const QString &label):**设置图例标记的文本标签。

3、信号

  • **void nameChanged():**该信号在图例标记的名称发生变化时发出。

  • **void opacityChanged():**当图例标记的不透明度发生变化时,该信号被发出。

  • **void useOpenGLChanged():**当图例标记的 OpenGL 使用状态发生变化时触发的信号。

  • **void visibleChanged():**当图例标记的可见性发生变化时发出此信号。

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, 10);
    upperSeries->append(1, 20);
    upperSeries->append(2, 15);
    upperSeries->append(3, 25);

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

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

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

    // 获取图例并自定义
    QLegend *legend = chart->legend();
    legend->setVisible(true);
    legend->setAlignment(Qt::AlignBottom);

    // 获取图例标记(QAreaLegendMarker)
    QList<QLegendMarker *> markers = legend->markers(areaSeries);
    for (QLegendMarker *marker : markers) {
        QAreaLegendMarker *areaMarker = qobject_cast<QAreaLegendMarker *>(marker);
        if (areaMarker) {
            // 自定义图例文本
            areaMarker->setLabel("自定义区域图例");

            // 自定义图例填充样式
            QBrush customBrush(Qt::yellow);
            areaMarker->setBrush(customBrush);

            // 添加点击事件
            QObject::connect(areaMarker, &QAreaLegendMarker::clicked, []() {
                qDebug() << "图例标记被点击!";
            });
        }
    }

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

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


    return a.exec();
}

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

相关推荐
Morwit4 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
金色熊族9 小时前
解析QTransform的用法
qt
追烽少年x11 小时前
Qt多线程编程:QThread与QtConcurrent的对比与应用
qt
小短腿的代码世界1 天前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
Python私教1 天前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
用户805533698031 天前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
小短腿的代码世界1 天前
Qt券商接口封装深度解析:统一API设计与多源适配
开发语言·qt·单元测试
T0uken1 天前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
(Charon)1 天前
【C++/Qt】Qt 实现 MQTT 测试工具:连接 Broker、订阅主题与发布消息
开发语言·c++·qt