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 天前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
刀法孜然1 天前
QT5.12.8开发中使用触摸屏,配置的环境变量,imx6ullpro开发板qt开发
qt
回眸不遇1 天前
详谈 QT 布局 QLayout::SizeConstraint 和 QSizePolicy 对 QWidget 尺寸的影响
数据库·qt·系统架构
Richard.Wong1 天前
qt生成dll供C#调用
开发语言·qt
Infedium2 天前
Qt嵌入式开发核心亮点:线程安全硬件交互技术
开发语言·qt
秋田君2 天前
QT_QInputDialog类输入对话框
开发语言·qt
秋田君3 天前
QT_QFontDialog类字体对话框
开发语言·qt
mabing9933 天前
Qt QMessageBox、QDialogButtonBox中英文翻译动态切换
开发语言·qt
秋田君3 天前
QT_QColorDialog颜色对话框
java·数据库·qt
秋田君3 天前
QT_QT布局常用类QSplitter窗口分割类与QDockWidget窗口停靠类
开发语言·数据库·qt