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();
}

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

相关推荐
jf加菲猫2 小时前
第2章 Hello World
开发语言·c++·qt·ui
laplace01233 小时前
PyQt5 + Qt Designer配置指令
开发语言·qt
奇树谦4 小时前
Qt 自定义菜单栏 / 工具栏按钮 QToolButton + InstantPopup 详细解析
开发语言·数据库·qt
QT 小鲜肉4 小时前
【C++基础与提高】第十一章:面向对象编程进阶——继承与多态
java·linux·开发语言·c++·笔记·qt
四维碎片5 小时前
【Qt】多线程学习笔记
笔记·qt·学习
TravisBytes5 小时前
一次 Qt 网络程序诡异崩溃排查:从 Breakpad 堆栈到 lambda 捕获悬空引用
网络·qt·php
碰大点6 小时前
数据库“Driver not loaded“错误,单例模式重构方案
数据库·sql·qt·单例模式·重构
上去我就QWER10 小时前
Qt快捷键“魔法师”:QKeySequence
开发语言·c++·qt
爱吃巧克力的程序媛16 小时前
将qt界面中加载css或者qss样式
开发语言·css·qt
开始了码16 小时前
QT:ItemWidgets模块介绍
开发语言·qt