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

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

相关推荐
程与留1 天前
06_Qt 常用数据类型与容器:QString、QList、QVector、QMap 的性能与实现分析
数据结构·qt
zlinear数据采集卡1 天前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
skr爱码士1 天前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt·系统架构·客户端
MOONICK1 天前
QT的UI开发框架
qt·ui
郝学胜-神的一滴1 天前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
NO12121 天前
python pyqt5調用攝像頭實時顯示
开发语言·python·qt
丰锋ff2 天前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
程与留2 天前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci2 天前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
Littlehero_1212 天前
QT自定义控件之热换站系统(源码开源)
开发语言·qt