QBarLegendMarker Class Reference

QBarLegendMarker 是 Qt 框架中用于条形图(Bar Chart)图例标记的类,通常与 QChartQBarSeries 结合使用。它用于在图表图例中显示条形图的颜色和标签信息。以下是对 QBarLegendMarker 的详细中文解析,以及一个完整的运行示例。


1. QBarLegendMarker 类详解

(1) 类的作用

QBarLegendMarkerQLegendMarker 的子类,专门用于条形图的图例标记。它负责在图例中显示条形图的颜色块和对应的标签。

(2) 主要功能
  • 显示颜色块:在图例中显示与条形图系列(QBarSeries)对应的颜色。
  • 显示标签:显示条形图系列的标签(如系列名称)。
  • 交互功能:支持点击图例标记来隐藏或显示对应的条形图系列。
(3) 常用方法
  • QBarSeries* series():返回与该图例标记关联的条形图系列。
  • void setBrush(const QBrush &brush):设置图例标记的颜色块画刷。
  • void setLabel(const QString &label):设置图例标记的标签文本。
  • void setPen(const QPen &pen):设置图例标记的边框画笔。
(4) 继承关系
QLegendMarker
    └── QBarLegendMarker

2. 完整运行示例

以下是一个使用 QBarLegendMarker 的完整示例,展示如何创建条形图并自定义图例标记。

(1) 示例代码
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 创建主窗口
    QMainWindow window;
    window.setWindowTitle("QBarLegendMarker 示例");

    // 创建图表
    QChart *chart = new QChart();
    chart->setTitle("条形图示例");

    // 创建条形图系列
    QBarSeries *series = new QBarSeries();

    // 创建条形图数据集
    QBarSet *set1 = new QBarSet("系列 1");
    *set1 << 1 << 2 << 3 << 4 << 5;
    set1->setColor(Qt::blue); // 设置颜色

    QBarSet *set2 = new QBarSet("系列 2");
    *set2 << 5 << 4 << 3 << 2 << 1;
    set2->setColor(Qt::red); // 设置颜色

    // 将数据集添加到系列
    series->append(set1);
    series->append(set2);

    // 将系列添加到图表
    chart->addSeries(series);

    // 设置 X 轴
    QStringList categories;
    categories << "类别 1" << "类别 2" << "类别 3" << "类别 4" << "类别 5";
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    axisX->append(categories);
    chart->setAxisX(axisX, series);

    // 设置 Y 轴
    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0, 6);
    chart->setAxisY(axisY, series);

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

    // 自定义图例标记
    for (QLegendMarker *marker : legend->markers()) {
        if (marker->type() == QLegendMarker::LegendMarkerTypeBar) {
            QBarLegendMarker *barMarker = qobject_cast<QBarLegendMarker *>(marker);
            if (barMarker) {
                // 设置颜色块画刷
                barMarker->setBrush(QBrush(Qt::green));
                // 设置边框画笔
                barMarker->setPen(QPen(Qt::black));
                // 设置标签文本
                barMarker->setLabel("自定义标签");
            }
        }
    }

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

    // 将图表视图设置为主窗口的中心部件
    window.setCentralWidget(chartView);

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

    return a.exec();
}
(2) 代码说明
  1. 创建条形图
    • 使用 QBarSeriesQBarSet 创建条形图数据。
    • 将数据集添加到系列,并将系列添加到图表。
  2. 设置坐标轴
    • 使用 QBarCategoryAxis 设置 X 轴类别。
    • 使用 QValueAxis 设置 Y 轴范围。
  3. 自定义图例标记
    • 获取图例标记(QLegendMarker),并转换为 QBarLegendMarker
    • 使用 setBrushsetPensetLabel 自定义颜色块、边框和标签。
  4. 显示图表
    • 使用 QChartView 显示图表,并将其设置为主窗口的中心部件。
(3) 运行效果
  • 窗口显示一个条形图,包含两个系列(蓝色和红色)。
  • 图例位于图表底部,图例标记的颜色块被自定义为绿色,边框为黑色,标签为“自定义标签”。

3. 总结

QBarLegendMarker 是 Qt Charts 模块中用于条形图图例标记的类,支持自定义颜色块、边框和标签。通过结合 QChartQBarSeries,可以轻松创建交互式条形图,并灵活控制图例的显示效果。以上示例展示了如何使用 QBarLegendMarker 自定义图例标记,适合需要美化图表的应用场景。

你可能感兴趣的:(c++)