拆分和合并图例

注意:这是 “带小部件的图表”示例库的一部分。

默认情况下,图表会在其所处的图形视图内部绘制图例。在某些情况下,用户可能希望将图例绘制在其他位置。为此,可以将图例从图表中分离出来。 “分离”意味着图例不再固定在图表的边缘,且图表不再控制图例的布局。取而代之的是,图例的几何形状由用户控制,从而可以自由调整图例的位置和大小。图例可以悬浮在图表内容上方,甚至绘制在另一个图形场景中。 可以通过运行此示例来测试图例的行为。

在此示例中,我们展示了一个条形系列,支持交互式地添加或移除条形集。随着条形集的添加和/或移除,图例会实时反映系列的变化。图例的锚定方式、对齐方式以及移动和调整大小的能力,均可通过QLegend 中的方法进行控制。

当图例脱离图表时,可以自由调整其大小和位置。如果启用了图例的交互功能,用户可以自由拖动和调整图例的大小。如果用户将图例拖出图表的任何一侧,它将自动重新附着到图表的该侧。

截图展示了条形图中图例分离的示例,以及用于配置该图表的各种选项

截图展示了另一个图例分离的示例,其中包含柱状图以及用于配置图表的各种选项

在此,我们将图例设为可见,并将其对齐方式设置为图表底部。

m_chart->legend()->setVisible(true);
m_chart->legend()->setAlignment(Qt::AlignBottom);

此代码片段演示了如何将图例从图表中分离。

legend->detachFromChart();

在此,我们将图例重新附着到图表上。同时将背景设置为不可见。

legend->attachToChart();

在此,我们连接到图例脱离或重新附着时发出的信号,使其在脱离时开启背景,附着时关闭背景。这样可以更清楚地看到图例脱离时内部项目的排列方式。

connect(legend, &QLegend::attachedToChartChanged, [legend, this](bool attachedToChart) {
    m_toggleAttachedButton->setChecked(attachedToChart);
    legend->setBackgroundVisible(!attachedToChart);
    m_geometrySettings->setDisabled(attachedToChart);
});

此处演示了如何使用鼠标等指针设备使图例对用户具有交互性。

legend->setInteractive(true);

此处演示了如何在图例不可交互时设置其分离后的尺寸。设置新值后,我们调用 update 方法以在屏幕上显示更改。

    QRectF geom = m_chart->legend()->geometry();
    if (qFuzzyCompare(geom.x(), m_legendPosX->value())
            && qFuzzyCompare(geom.y(), m_legendPosY->value())
            && qFuzzyCompare(geom.width(), m_legendWidth->value())
            && qFuzzyCompare(geom.height(), m_legendHeight->value()))
        return;

    m_chart->legend()->setGeometry(QRectF(m_legendPosX->value(),
                                          m_legendPosY->value(),
                                          m_legendWidth->value(),
                                          m_legendHeight->value()));
    m_chart->legend()->update();

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.