您的位置:首页 > 房产 > 家装 > 广州建设网站公司_web前端模板下载网站_郑州网站推广优化公司_b2b商务平台

广州建设网站公司_web前端模板下载网站_郑州网站推广优化公司_b2b商务平台

2024/12/28 8:51:44 来源:https://blog.csdn.net/p309654858/article/details/143506560  浏览:    关键词:广州建设网站公司_web前端模板下载网站_郑州网站推广优化公司_b2b商务平台
广州建设网站公司_web前端模板下载网站_郑州网站推广优化公司_b2b商务平台

文章目录

      • 实现步骤:
      • 实现代码:
      • 代码讲解:
      • 功能说明:
      • 优化建议:
      • 其他参考:

要实现一个支持勾选并可以控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写其相关方法来实现。我们需要添加一个自定义的复选框元素,并捕捉用户交互来实现曲线的隐藏和显示。

实现步骤:

  1. 继承 QCPLegend
  2. 重写绘制方法以支持复选框绘制。
  3. 处理鼠标点击事件来检测用户是否点击了复选框,并更新曲线的可见性。

实现代码:

#include "qcustomplot.h"
#include <QMouseEvent>class CustomLegend : public QCPLegend {Q_OBJECT
public:CustomLegend(QCustomPlot *parentPlot) : QCPLegend(parentPlot) {// 启用鼠标交互以响应点击事件setSelectableParts(QCPLegend::spItems);}protected:// 重写鼠标事件处理函数以检测复选框的点击void mousePressEvent(QMouseEvent *event) override {for (int i = 0; i < itemCount(); ++i) {QCPAbstractLegendItem *legendItem = item(i);if (legendItem->selectTest(event->pos(), false) >= 0) {// 检测是否点击了图例项QCPPlottableLegendItem *plottableItem = qobject_cast<QCPPlottableLegendItem *>(legendItem);if (plottableItem) {QCPGraph *graph = qobject_cast<QCPGraph *>(plottableItem->plottable());if (graph) {// 切换曲线的可见性graph->setVisible(!graph->visible());parentPlot()->replot(); // 更新绘图}}break;}}// 调用父类的事件处理QCPLegend::mousePressEvent(event);}// 重写绘制函数以绘制复选框void draw(QCPPainter *painter) override {for (int i = 0; i < itemCount(); ++i) {QCPAbstractLegendItem *legendItem = item(i);QRectF iconRect = legendItem->outerRect();// 绘制自定义的复选框QRectF checkBoxRect(iconRect.left() - 15, iconRect.top() + (iconRect.height() - 10) / 2, 10, 10);painter->setBrush(legendItem->plottable()->visible() ? Qt::black : Qt::white);painter->drawRect(checkBoxRect);}// 调用父类的绘制方法QCPLegend::draw(painter);}
};// 使用自定义图例类的示例
void setupCustomLegend(QCustomPlot *customPlot) {customPlot->legend = new CustomLegend(customPlot);customPlot->axisRect()->insetLayout()->addElement(customPlot->legend, Qt::AlignTop | Qt::AlignRight);customPlot->legend->setVisible(true);// 添加曲线示例QCPGraph *graph = customPlot->addGraph();graph->setName("示例曲线");graph->setData(QVector<double>{1, 2, 3, 4, 5}, QVector<double>{5, 4, 3, 2, 1});customPlot->replot();
}

代码讲解:

  1. CustomLegend 类继承了 QCPLegend,并重写了 mousePressEventdraw 方法。
  2. mousePressEvent 中检测到用户点击图例项后,切换对应曲线的可见性。
  3. draw 方法中绘制了自定义的复选框,指示曲线是否可见。

功能说明:

  • 点击复选框区域可以隐藏或显示曲线。
  • 使用 graph->setVisible() 控制曲线的显示状态。
  • 调用 parentPlot()->replot() 以刷新 QCustomPlot

优化建议:

  • 可以扩展功能,让复选框有不同的样式,如选中和未选中的图标。
  • 支持更多自定义的鼠标事件,比如右键点击进行其他操作。

其他参考:

https://blog.csdn.net/ljsant/article/details/136510049

https://blog.csdn.net/qq_37603131/category_11166576.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=11166576&sharerefer=PC&sharesource=p309654858&sharefrom=from_link

https://blog.csdn.net/qq_37603131/article/details/128280948

https://blog.csdn.net/LaughOutLoud_x/article/details/136369390

https://blog.csdn.net/qq_15672897/article/details/123628849

https://blog.csdn.net/qq_23208659/article/details/117031802

https://blog.csdn.net/u013083044/article/details/131632271

https://blog.csdn.net/Mr_robot_strange/article/details/128863438

https://blog.csdn.net/m0_49456900/article/details/125100839

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com