前言
最近不是在画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);
}