分离和附加图例

注: 这是带 Widgets 图库的图表示例的一部分。

默认情况下,图表会在图表所在的同一图形视图中绘制图例。在某些情况下,用户可能希望在其他地方绘制图例。为此,可以将图例从图表中分离出来。分离意味着图例不再固定在图表的边缘,图表也不再控制图例的布局。相反,图例的几何形状由用户控制,用户可以自由控制图例的位置和大小。图例可以浮动在图表内容之上,甚至可以在不同的图形场景中绘制。可以通过运行此示例来测试图例的行为。

在这个示例中,我们显示了一个条形系列,允许以交互方式添加或删除条形集。当添加和/或删除条形图组时,图例会反映出序列的变化。可以使用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();

© 2025 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.