qcustomplot使用鼠标点击选中多个点


使用qcustomplot类来实现对多个物体的选择

 

如图所示,我画了一个散点图,现在我想要实现使用鼠标点击选中某些点的功能

 

 

 如上图所示,代码如下(附带详细注释):

 1 void MainWindow::myPaint(QCustomPlot *customPlot)  2 {  3  QPen pen;  4     pen.setColor(QColor(255,0,0));  5     pen.setWidth(10);  6     customPlot->addGraph();  7     customPlot->graph(0)->setLineStyle(QCPGraph::lsNone);  //取消点与点之间的连线  8     customPlot->graph(0)->setPen(pen);  9     customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 8));  //设置散点为圆点 10     QVector<double> x(10), y(10); 11     qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime())); 12 
13     for (int i=0;i<10;i++) { 14         x[i]=i; 15         y[i]=i+qrand()%20; 16  } 17 
18     customPlot->graph(0)->setData(x,y); 19     customPlot->graph(0)->rescaleAxes();
37 
38     customPlot->graph(0)->setSelectable(QCP::stDataRange); 39     customPlot->setMultiSelectModifier(Qt::KeyboardModifier::ControlModifier); 40     //在设置选择多个点的时候首先要设置绘图板是可选择的(QCP::iSelectPlottables),然后再设置可选择多个物体(QCP::iMultiSelect)
41     customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables | QCP::iMultiSelect);
43     customPlot->replot(); 44 }
customPlot->graph(0)->setSelectable(QCP::stDataRange);
设置选择的方式,官方文档有详细的介绍:

 

customPlot->setMultiSelectModifier(Qt::KeyboardModifier::ControlModifier);

 官方文档中说该函数是用来设置多选时的调节器的(翻译水平有限,见谅),具体什么意思呢?

就是说我们在按住你设置的键之后就可以进行多选了,我这里设置为符合日常操作的ctrl键。

按照官方的说法,我们需要在setinteractions函数中设置QCP::iMultiSelect多选属性,如下图所示:

 

 当然错误是无法避免的,一开始我只是设置了这个属性,运行之后发现在散点上点击无响应,后来才知道需要设置图层可选中即QCP::iSelectPlottables

因为散点是位于图层之上的,那么如果图层都无法选择又怎么可以选择散点呢?

水平有限,如有错误,还望指正,多谢阅读!

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM