Qt示例解析 【图表应用一】Legend

您所在的位置:网站首页 legend位置设置 Qt示例解析 【图表应用一】Legend

Qt示例解析 【图表应用一】Legend

2024-07-06 03:15| 来源: 网络整理| 查看: 265

目的:介绍Qt中图表可以达到的一些效果,可以把我们的项目做的高大上。

此博文主要介绍图表说明Legend的一些设置,来源示例Legend和LegendMarker,位于\Examples\Qt-5.9.4\charts\

Legend主要实现对图表说明的编辑,添加删除Bar,图表说明的位置,以及图表说明字体的设置

LegendMarker主要实现图表说明与图表的对应关系,点击图表说明可以显示/隐藏相应的图表,上面图中隐藏了line1和line3

1. 放置位置

附着图表 m_chart->legend()->attachToChart();

不附着图表 m_chart->legend()->detachFromChart();

         位于图表上方 m_chart->legend()->setAlignment(Qt::AlignTop);

         位于图表下方 m_chart->legend()->setAlignment(Qt::AlignBottom);

         位于图表左侧 m_chart->legend()->setAlignment(Qt::AlignLeft);

         位于图表右侧 m_chart->legend()->setAlignment(Qt::AlignRight);

2. 设置字体 QFont font = m_chart->legend()->font(); font.setBold(!font.bold());//是否加粗 font.setItalic(!font.italic());//是否斜体 font.setPointSizeF(m_fontSize->value());//设置字体大小 m_chart->legend()->setFont(font); 3. 附着图表时设置边框 m_chart->legend()->setGeometry(QRectF(x,y,width,height)); m_chart->legend()->update(); 4. 关联图表说明与图表

实现效果:点击图表说明时,相应的图表被显示或隐藏。

建立信号QLegendMarker::clicked-槽handleMarkerClicked关系

const auto markers = m_chart->legend()->markers(); for (QLegendMarker *marker : markers) { // Disconnect possible existing connection to avoid multiple connections QObject::disconnect(marker, &QLegendMarker::clicked, this, &MainWidget::handleMarkerClicked); QObject::connect(marker, &QLegendMarker::clicked, this, &MainWidget::handleMarkerClicked); }

槽函数handleMarkerClicked实现

void handleMarkerClicked() { //通过关联机制获取当前点击的LegendMarker QLegendMarker* marker = qobject_cast (sender()); Q_ASSERT(marker);//若LegendMarker为空,则退出 switch (marker->type()) { //LegendMarkerType有以下几种情况: //LegendMarkerTypeXY表示line,spline,scatter的LegendMarker //LegendMarkerTypeArea表示area的LegendMarker //LegendMarkerTypeBar表示bar柱状图的LegendMarker //LegendMarkerTypePie表示pie饼状图的LegendMarker //LegendMarkerTypeBoxPlot表示盒形图的LegendMarker //LegendMarkerTypeCandlestick表示蜡烛图的LegendMarker case QLegendMarker::LegendMarkerTypeXY: { marker->series()->setVisible(!marker->series()->isVisible()); // Turn legend marker back to visible, since hiding series also hides the marker // and we don't want it to happen now. marker->setVisible(true); // Dim the marker, if series is not visible qreal alpha = 1.0; if (!marker->series()->isVisible()) alpha = 0.5; QColor color; QBrush brush = marker->labelBrush(); color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setLabelBrush(brush); brush = marker->brush(); color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setBrush(brush); QPen pen = marker->pen(); color = pen.color(); color.setAlphaF(alpha); pen.setColor(color); marker->setPen(pen); break; } default: { qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3