QCustomPlot如何使用代码修改当前焦点曲线QCPGraph

前言

最近不是在画QCustomPlot曲线嘛,然后现在就是,我有一个功能需要使用到曲线切换,当我在外部点击一个按钮的时候,可能需要切换图表上的焦点曲线。这个功能我找了很久之后我发现QCustomPlot居然原生不支持!没有这种接口,得自己写。然后我折腾了很久,发现其实做这个比较简单,主要问题是文心一言确实垃圾,以后还是申请个梯子上gpt吧,还好也就充了一个月的会员,好钢还是要用在刀刃上。

代码如下,我是直接加到了qcustomplot.cpp下,然后再QCustomPlot类中加了一个公共方法,如下:

void QCustomPlot::setSelected(QCPGraph* graph, bool selected)
{
	// 取消选择所有的graphs  
	foreach(QCPLayer * layer, mLayers)
	{
		foreach(QCPLayerable * layerable, layer->children())
		{
			QCPGraph* currentGraph = dynamic_cast<QCPGraph*>(layerable);
			if (currentGraph && currentGraph != graph)
			{
				// 对于非目标graph,我们模拟一个取消选择事件  
				bool selChanged = false;
				currentGraph->deselectEvent(&selChanged);
				if (selChanged)
				{
					// 可以在这里处理选择状态变化后的逻辑(如果需要)  
				}
			}
		}
	}

	// 设置指定graph的选择状态  
	if (graph)
	{
		// 模拟一个选择事件来设置graph的选择状态  
		bool selChanged = false;

		QVariant details; // 可以根据需要填充详细信息  
	    
		if (selected)
		{
			// 假设我们有一个类似selectEvent的函数来处理选择  
			// 这里我们模拟一个鼠标事件来触发选择,传递一个假的鼠标事件或者null都可以  
			QCPGraphDataContainer* data = graph->data().data();
			QCPDataRange selectionRange(data->dataRange());
			QCPDataSelection selection(selectionRange);
			graph->setSelection(selection);
		}
		else
		{
			graph->deselectEvent(&selChanged);
		}

		if (selChanged)
		{
			// 可以在这里处理选择状态变化后的逻辑(如果需要)  
		}
	}

	// 发出选择变化的信号并重新绘制图表  
	emit selectionChangedByUser();
	replot(rpQueuedReplot);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值