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


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