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

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

相关推荐
hqwest4 分钟前
QT肝8天13--删除用户
开发语言·c++·qt·csdn开发云·列表分页·qt分页
hqwest1 小时前
QT肝8天08--主界面设计
开发语言·qt·上位机·qt开发·ui设计
金色熊族13 小时前
ubuntu20.04编译qt源码5.15.3
linux·c++·qt
看着捉急18 小时前
x86_64 centos7.2 上用aarch64-linux-gnu-gcc4.8.5交叉编译qt5.11.3
linux·运维·qt
行者..................20 小时前
petalinux 安装Openblass库
qt
掘根1 天前
【Qt】布局管理器
开发语言·qt
得鹿梦鱼、2 天前
QT示例 使用QTcpSocket和QTcpServer类实现TCP的自定义消息头、消息体通信示例
qt·qtcpsocket·qtcpserver·二进制协议通信·pimpl模式
茉莉玫瑰花茶2 天前
Qt 界面优化 --- 绘图
开发语言·数据库·qt
掘根2 天前
【Qt】容器类控件——QTabWidget
开发语言·qt
hqwest2 天前
QT肝8天07--连接数据库
开发语言·数据库·c++·qt·sqlite·上位机·qt开发