qcustomplot 使用plot->setInteractions( QCP::iSelectPlottables); 怎么不改变选中rect中QCPGraph *graph的颜色

时间: 2023-11-28 16:48:26 浏览: 52
`QCustomPlot` 中的 `setInteractions()` 函数只负责设置交互方式,而不会直接影响选中的 `QCPGraph` 的颜色。如果你想改变选中 `QCPGraph` 的颜色,可以使用信号槽机制,如下所示: ```cpp connect(plot, SIGNAL(selectionChangedByUser()), this, SLOT(onSelectionChanged())); ``` 在 `onSelectionChanged()` 槽函数中,你可以获取到被选中的 `QCPGraph`,并在函数中修改其颜色,如下所示: ```cpp void MyClass::onSelectionChanged() { QCPDataSelection selection = mPlot->graph()->selection(); if (selection.dataRange().isValid()) { QCPGraph *graph = mPlot->graph(); graph->setPen(QPen(Qt::red)); // 设置选中的曲线颜色为红色 } } ``` 上述例子中,当用户选择 `QCustomPlot` 中的某个 `QCPGraph` 时,`onSelectionChanged()` 槽函数就会被调用。在该槽函数中,我们首先获取当前被选中的数据,然后根据需要修改选中的 `QCPGraph` 的颜色。在这里,我们将选中的 `QCPGraph` 的颜色设置为红色。
相关问题

qcustomplot 使用plot->setInteractions( QCP::iSelectPlottables); 怎么不改变选中点的颜色

`setInteractions` 方法是设置图形界面中与用户交互的方式,比如允许用户选中点,拖动图像等。如果你想改变选中点的颜色,可以使用 `QCPScatterStyle` 类中的 `setSelected` 方法。 以下是一个实例代码: ```cpp // 创建一个 scatter plot QCustomPlot *customPlot = new QCustomPlot(this); QCPGraph *graph = customPlot->addGraph(); graph->setScatterStyle(QCPScatterStyle::ssCircle); // 设置选中点的颜色 QCPScatterStyle selectedStyle; selectedStyle.setShape(QCPScatterStyle::ssCircle); selectedStyle.setPen(QPen(Qt::red)); selectedStyle.setBrush(Qt::red); graph->setSelectionDecorator(selectedStyle); // 设置交互方式 customPlot->setInteractions(QCP::iSelectPlottables); // 显示图像 customPlot->replot(); ``` 在这个例子中,我们首先创建了一个 scatter plot,并设置了默认的散点样式为圆形。然后我们创建了一个 `QCPScatterStyle` 对象 `selectedStyle`,用于设置选中点的样式,其中 `setPen` 和 `setBrush` 方法分别设置选中点的边框颜色和填充颜色。接下来,我们使用 `setSelectionDecorator` 方法将 `selectedStyle` 应用到 scatter plot 上。最后,我们使用 `setInteractions` 方法设置了交互方式,允许用户选中散点。

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtWidgets> #include <QResizeEvent> //绘图区域大小变化事件 #include <QDebug> #include <QThread> #include <QTimer> #include <QVector> #include <QRandomGenerator> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->plot->setOpenGl(true); ui->plot->setNoAntialiasingOnDrag(true); CreateChart(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::CreateChart() { ui->plot->addGraph(); ui->plot->graph(0)->setPen(QPen(QColor(100,149,237))); mData = ui->plot->graph(0)->data()->coreData(); ui->plot->xAxis2->setVisible(true); ui->plot->xAxis2->setTickLabels(false); ui->plot->yAxis2->setVisible(true); ui->plot->yAxis2->setTickLabels(false); connect(ui->plot->xAxis, SIGNAL(rangeChanged(QCPRange)), ui->plot->xAxis2, SLOT(setRange(QCPRange))); connect(ui->plot->yAxis, SIGNAL(rangeChanged(QCPRange)), ui->plot->yAxis2, SLOT(setRange(QCPRange))); ui->plot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom|QCP::iSelectPlottables); ui->plot->yAxis->setRange(-1.5,1.5); ui->plot->xAxis->setRange(0,50); ui->plot->yAxis->setLabel("数据"); ui->plot->xAxis->setLabel("个数"); for (int i = 0; i < 50; i++) { mXDataTol.append(i); mYDataTol.append(QRandomGenerator::global()->bounded(1.00)); } ui->plot->graph(0)->setData(mXDataTol,mYDataTol,true); ui->plot->replot(); }这是我的全部代码,系统报错:terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc请帮我修改一下代码,我不知道到底哪里出了错

这个错误通常是由于内存不足导致的,也就是说程序尝试分配的内存超过了系统可用的内存。在你的代码中,我没有看到明显的内存泄漏或者内存溢出的问题。因此,我建议你尝试使用 Valgrind 等内存检测工具来检查你的程序是否存在内存问题。 此外,你可以尝试优化你的代码,减少内存的使用。具体来说,你可以考虑使用 QVector::reserve() 函数来预分配内存,避免频繁地动态分配和释放内存。例如: ```cpp mXDataTol.reserve(50); mYDataTol.reserve(50); for (int i = 0; i < 50; i++) { mXDataTol.append(i); mYDataTol.append(QRandomGenerator::global()->bounded(1.00)); } ``` 另外,你还可以使用 Qt 的智能指针类来管理内存,避免手动分配和释放内存。例如,你可以将 mData 声明为一个 QSharedPointer<QCPDataMap> 类型的智能指针,这样可以自动管理 mData 的内存,避免内存泄漏和悬挂指针的问题。

相关推荐

最新推荐

recommend-type

Matplotlib不能显示中文 — Font family [‘sans-serif’] not found警告

Matplotlib不能显示中文和正负号的问题 这两天被这个中文正负号的问题困扰了很久,网上的方法试了好多,然后并没有什么卵用 老规矩开发环境 操作系统:Ubuntu19.10 开发IDE: Pycharm20.1 开发工具:Anaconda python...
recommend-type

华为OD机试D卷 - 用连续自然数之和来表达整数 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg
recommend-type

数字图像处理|Matlab-频域增强实验-彩色图像的频域滤波.zip

数字图像处理|Matlab-频域增强实验-彩色图像的频域滤波.zip
recommend-type

2024-2030中国定向转向膜市场现状研究分析与发展前景预测报告.docx

2024-2030中国定向转向膜市场现状研究分析与发展前景预测报告
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。